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 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
465 | 465 |
466 if (rule->type() == CSSRule::MEDIA_RULE) | 466 if (rule->type() == CSSRule::MEDIA_RULE) |
467 return toCSSMediaRule(rule)->cssRules(); | 467 return toCSSMediaRule(rule)->cssRules(); |
468 | 468 |
469 if (rule->type() == CSSRule::SUPPORTS_RULE) | 469 if (rule->type() == CSSRule::SUPPORTS_RULE) |
470 return toCSSSupportsRule(rule)->cssRules(); | 470 return toCSSSupportsRule(rule)->cssRules(); |
471 | 471 |
472 return nullptr; | 472 return nullptr; |
473 } | 473 } |
474 | 474 |
475 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyle::create(const InspectorCSS Id& styleId, PassRefPtrWillBeRawPtr<CSSStyleDeclaration> style, InspectorStyleSh eetBase* parentStyleSheet) | 475 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyle::create(unsigned ruleIndex , PassRefPtrWillBeRawPtr<CSSStyleDeclaration> style, InspectorStyleSheetBase* pa rentStyleSheet) |
476 { | 476 { |
477 return adoptRefWillBeNoop(new InspectorStyle(styleId, style, parentStyleShee t)); | 477 return adoptRefWillBeNoop(new InspectorStyle(ruleIndex, style, parentStyleSh eet)); |
478 } | 478 } |
479 | 479 |
480 InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtrWillBeRa wPtr<CSSStyleDeclaration> style, InspectorStyleSheetBase* parentStyleSheet) | 480 InspectorStyle::InspectorStyle(unsigned ruleIndex, PassRefPtrWillBeRawPtr<CSSSty leDeclaration> style, InspectorStyleSheetBase* parentStyleSheet) |
481 : m_styleId(styleId) | 481 : m_ruleIndex(ruleIndex) |
482 , m_style(style) | 482 , m_style(style) |
483 , m_parentStyleSheet(parentStyleSheet) | 483 , m_parentStyleSheet(parentStyleSheet) |
484 , m_formatAcquired(false) | 484 , m_formatAcquired(false) |
485 { | 485 { |
486 ASSERT(m_style); | 486 ASSERT(m_style); |
487 } | 487 } |
488 | 488 |
489 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con st | 489 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con st |
490 { | 490 { |
491 RefPtr<TypeBuilder::CSS::CSSStyle> result = styleWithProperties(); | 491 RefPtr<TypeBuilder::CSS::CSSStyle> result = styleWithProperties(); |
492 if (!m_styleId.isEmpty()) | 492 if (m_parentStyleSheet && !m_parentStyleSheet->id().isEmpty()) |
493 result->setStyleSheetId(m_styleId.styleSheetId()); | 493 result->setStyleSheetId(m_parentStyleSheet->id()); |
494 | 494 |
495 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); | 495 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); |
496 if (sourceData) | 496 if (sourceData) |
497 result->setRange(buildSourceRangeObject(sourceData->ruleBodyRange, m_par entStyleSheet->lineEndings())); | 497 result->setRange(buildSourceRangeObject(sourceData->ruleBodyRange, m_par entStyleSheet->lineEndings())); |
498 | 498 |
499 return result.release(); | 499 return result.release(); |
500 } | 500 } |
501 | 501 |
502 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > Insp ectorStyle::buildArrayForComputedStyle() const | 502 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > Insp ectorStyle::buildArrayForComputedStyle() const |
503 { | 503 { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
574 if (overwrite) { | 574 if (overwrite) { |
575 if (index >= allProperties.size()) { | 575 if (index >= allProperties.size()) { |
576 exceptionState.throwDOMException(IndexSizeError, "The index provided (" + String::number(index) + ") is greater than or equal to the maximum bound ( " + String::number(allProperties.size()) + ")."); | 576 exceptionState.throwDOMException(IndexSizeError, "The index provided (" + String::number(index) + ") is greater than or equal to the maximum bound ( " + String::number(allProperties.size()) + ")."); |
577 return false; | 577 return false; |
578 } | 578 } |
579 editor.replaceProperty(index, propertyText); | 579 editor.replaceProperty(index, propertyText); |
580 } else { | 580 } else { |
581 editor.insertProperty(index, propertyText); | 581 editor.insertProperty(index, propertyText); |
582 } | 582 } |
583 | 583 |
584 return m_parentStyleSheet->setStyleText(m_styleId, editor.styleText()); | 584 return m_parentStyleSheet->setStyleText(m_ruleIndex, editor.styleText()); |
585 } | 585 } |
586 | 586 |
587 bool InspectorStyle::styleText(String* result) const | 587 bool InspectorStyle::styleText(String* result) const |
588 { | 588 { |
589 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); | 589 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); |
590 if (!sourceData) | 590 if (!sourceData) |
591 return false; | 591 return false; |
592 | 592 |
593 return textForRange(sourceData->ruleBodyRange, result); | 593 return textForRange(sourceData->ruleBodyRange, result); |
594 } | 594 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
690 RefPtr<TypeBuilder::CSS::CSSStyle> result = TypeBuilder::CSS::CSSStyle::crea te() | 690 RefPtr<TypeBuilder::CSS::CSSStyle> result = TypeBuilder::CSS::CSSStyle::crea te() |
691 .setCssProperties(propertiesObject) | 691 .setCssProperties(propertiesObject) |
692 .setShorthandEntries(shorthandEntries); | 692 .setShorthandEntries(shorthandEntries); |
693 return result.release(); | 693 return result.release(); |
694 } | 694 } |
695 | 695 |
696 PassRefPtrWillBeRawPtr<CSSRuleSourceData> InspectorStyle::extractSourceData() co nst | 696 PassRefPtrWillBeRawPtr<CSSRuleSourceData> InspectorStyle::extractSourceData() co nst |
697 { | 697 { |
698 if (!m_parentStyleSheet || !m_parentStyleSheet->ensureParsedDataReady()) | 698 if (!m_parentStyleSheet || !m_parentStyleSheet->ensureParsedDataReady()) |
699 return nullptr; | 699 return nullptr; |
700 return m_parentStyleSheet->ruleSourceDataAt(m_styleId.ordinal()); | 700 return m_parentStyleSheet->ruleSourceDataAt(m_ruleIndex); |
701 } | 701 } |
702 | 702 |
703 String InspectorStyle::shorthandValue(const String& shorthandProperty) const | 703 String InspectorStyle::shorthandValue(const String& shorthandProperty) const |
704 { | 704 { |
705 String value = m_style->getPropertyValue(shorthandProperty); | 705 String value = m_style->getPropertyValue(shorthandProperty); |
706 if (value.isEmpty()) { | 706 if (value.isEmpty()) { |
707 StringBuilder builder; | 707 StringBuilder builder; |
708 | 708 |
709 for (unsigned i = 0; i < m_style->length(); ++i) { | 709 for (unsigned i = 0; i < m_style->length(); ++i) { |
710 String individualProperty = m_style->item(i); | 710 String individualProperty = m_style->item(i); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
801 visitor->trace(m_parentStyleSheet); | 801 visitor->trace(m_parentStyleSheet); |
802 } | 802 } |
803 | 803 |
804 InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* lis tener) | 804 InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* lis tener) |
805 : m_id(id) | 805 : m_id(id) |
806 , m_listener(listener) | 806 , m_listener(listener) |
807 , m_lineEndings(adoptPtr(new LineEndings())) | 807 , m_lineEndings(adoptPtr(new LineEndings())) |
808 { | 808 { |
809 } | 809 } |
810 | 810 |
811 bool InspectorStyleSheetBase::setPropertyText(const InspectorCSSId& id, unsigned propertyIndex, const String& text, bool overwrite, ExceptionState& exceptionSta te) | 811 bool InspectorStyleSheetBase::setPropertyText(unsigned ruleIndex, unsigned prope rtyIndex, const String& text, bool overwrite, ExceptionState& exceptionState) |
812 { | 812 { |
813 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); | 813 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleAt(ruleInd ex); |
814 if (!inspectorStyle) { | 814 if (!inspectorStyle) { |
815 exceptionState.throwDOMException(NotFoundError, "No property could be fo und for the given ID."); | 815 exceptionState.throwDOMException(NotFoundError, "No property could be fo und for the given ID."); |
816 return false; | 816 return false; |
817 } | 817 } |
818 return inspectorStyle->setPropertyText(propertyIndex, text, overwrite, excep tionState); | 818 return inspectorStyle->setPropertyText(propertyIndex, text, overwrite, excep tionState); |
819 } | 819 } |
820 | 820 |
821 bool InspectorStyleSheetBase::getStyleText(const InspectorCSSId& id, String* tex t) | 821 bool InspectorStyleSheetBase::getStyleText(unsigned ruleIndex, String* text) |
822 { | 822 { |
823 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); | 823 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleAt(ruleInd ex); |
824 if (!inspectorStyle) | 824 if (!inspectorStyle) |
825 return false; | 825 return false; |
826 return inspectorStyle->styleText(text); | 826 return inspectorStyle->styleText(text); |
827 } | 827 } |
828 | 828 |
829 void InspectorStyleSheetBase::onStyleSheetTextChanged() | 829 void InspectorStyleSheetBase::onStyleSheetTextChanged() |
830 { | 830 { |
831 m_lineEndings = adoptPtr(new LineEndings()); | 831 m_lineEndings = adoptPtr(new LineEndings()); |
832 if (listener()) | 832 if (listener()) |
833 listener()->styleSheetChanged(this); | 833 listener()->styleSheetChanged(this); |
834 } | 834 } |
835 | 835 |
836 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForSt yle(CSSStyleDeclaration* style) | 836 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForSt yle(CSSStyleDeclaration* style) |
837 { | 837 { |
838 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr; | 838 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr; |
839 if (ensureParsedDataReady()) | 839 if (ensureParsedDataReady()) |
840 sourceData = ruleSourceDataAt(styleId(style).ordinal()); | 840 sourceData = ruleSourceDataAt(indexOf(style)); |
841 | 841 |
842 InspectorCSSId id = styleId(style); | 842 unsigned ruleIndex = indexOf(style); |
843 if (id.isEmpty()) { | 843 if (id().isEmpty()) { |
844 // Any rule coming from User Agent and not from DefaultStyleSheet will n ot have id. | 844 // Any rule coming from User Agent and not from DefaultStyleSheet will n ot have id. |
845 // See InspectorCSSAgent::buildObjectForRule for details. | 845 // See InspectorCSSAgent::buildObjectForRule for details. |
846 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = InspectorStyle::crea te(id, style, this); | 846 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = InspectorStyle::crea te(ruleIndex, style, this); |
847 return inspectorStyle->buildObjectForStyle(); | 847 return inspectorStyle->buildObjectForStyle(); |
848 } | 848 } |
849 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); | 849 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleAt(ruleInd ex); |
850 RefPtr<TypeBuilder::CSS::CSSStyle> result = inspectorStyle->buildObjectForSt yle(); | 850 RefPtr<TypeBuilder::CSS::CSSStyle> result = inspectorStyle->buildObjectForSt yle(); |
851 | 851 |
852 // Style text cannot be retrieved without stylesheet, so set cssText here. | 852 // Style text cannot be retrieved without stylesheet, so set cssText here. |
853 if (sourceData) { | 853 if (sourceData) { |
854 String sheetText; | 854 String sheetText; |
855 bool success = getText(&sheetText); | 855 bool success = getText(&sheetText); |
856 if (success) { | 856 if (success) { |
857 const SourceRange& bodyRange = sourceData->ruleBodyRange; | 857 const SourceRange& bodyRange = sourceData->ruleBodyRange; |
858 result->setCssText(sheetText.substring(bodyRange.start, bodyRange.en d - bodyRange.start)); | 858 result->setCssText(sheetText.substring(bodyRange.start, bodyRange.en d - bodyRange.start)); |
859 } | 859 } |
(...skipping 18 matching lines...) Expand all Loading... | |
878 if (lineNumber >= endings->size()) | 878 if (lineNumber >= endings->size()) |
879 return false; | 879 return false; |
880 unsigned charactersInLine = lineNumber > 0 ? endings->at(lineNumber) - endin gs->at(lineNumber - 1) - 1 : endings->at(0); | 880 unsigned charactersInLine = lineNumber > 0 ? endings->at(lineNumber) - endin gs->at(lineNumber - 1) - 1 : endings->at(0); |
881 if (columnNumber > charactersInLine) | 881 if (columnNumber > charactersInLine) |
882 return false; | 882 return false; |
883 TextPosition position(OrdinalNumber::fromZeroBasedInt(lineNumber), OrdinalNu mber::fromZeroBasedInt(columnNumber)); | 883 TextPosition position(OrdinalNumber::fromZeroBasedInt(lineNumber), OrdinalNu mber::fromZeroBasedInt(columnNumber)); |
884 *offset = position.toOffset(*endings).zeroBasedInt(); | 884 *offset = position.toOffset(*endings).zeroBasedInt(); |
885 return true; | 885 return true; |
886 } | 886 } |
887 | 887 |
888 bool InspectorStyleSheetBase::findPropertyByRange(const SourceRange& sourceRange , InspectorCSSId* ruleId, unsigned* propertyIndex, bool* overwrite) | 888 bool InspectorStyleSheetBase::findPropertyByRange(const SourceRange& sourceRange , unsigned* ruleIndex, unsigned* propertyIndex, bool* overwrite) |
889 { | 889 { |
890 if (!ensureParsedDataReady()) | 890 if (!ensureParsedDataReady()) |
891 return false; | 891 return false; |
892 for (size_t i = 0; i < ruleCount(); ++i) { | 892 for (size_t i = 0; i < ruleCount(); ++i) { |
893 RefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceData = ruleSourceDataAt( i); | 893 RefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceData = ruleSourceDataAt( i); |
894 RefPtrWillBeRawPtr<CSSStyleSourceData> styleSourceData = ruleSourceData- >styleSourceData; | 894 RefPtrWillBeRawPtr<CSSStyleSourceData> styleSourceData = ruleSourceData- >styleSourceData; |
895 if (!styleSourceData) | 895 if (!styleSourceData) |
896 continue; | 896 continue; |
897 if (ruleSourceData->ruleBodyRange.end < sourceRange.start || sourceRange .end < ruleSourceData->ruleBodyRange.start) | 897 if (ruleSourceData->ruleBodyRange.end < sourceRange.start || sourceRange .end < ruleSourceData->ruleBodyRange.start) |
898 continue; | 898 continue; |
899 WillBeHeapVector<CSSPropertySourceData>& propertyData = styleSourceData- >propertyData; | 899 WillBeHeapVector<CSSPropertySourceData>& propertyData = styleSourceData- >propertyData; |
900 for (size_t j = 0; j < propertyData.size(); ++j) { | 900 for (size_t j = 0; j < propertyData.size(); ++j) { |
901 CSSPropertySourceData& property = propertyData.at(j); | 901 CSSPropertySourceData& property = propertyData.at(j); |
902 unsigned styleStart = ruleSourceData->ruleBodyRange.start; | 902 unsigned styleStart = ruleSourceData->ruleBodyRange.start; |
903 if (sourceRange.length() && property.range.start == sourceRange.star t && property.range.end == sourceRange.end) { | 903 if (sourceRange.length() && property.range.start == sourceRange.star t && property.range.end == sourceRange.end) { |
904 *ruleId = InspectorCSSId(id(), i); | 904 *ruleIndex = i; |
905 *propertyIndex = j; | 905 *propertyIndex = j; |
906 *overwrite = true; | 906 *overwrite = true; |
907 return true; | 907 return true; |
908 } | 908 } |
909 if (!sourceRange.length() && styleStart <= sourceRange.start && sour ceRange.start <= property.range.start) { | 909 if (!sourceRange.length() && styleStart <= sourceRange.start && sour ceRange.start <= property.range.start) { |
910 *ruleId = InspectorCSSId(id(), i); | 910 *ruleIndex = i; |
911 *propertyIndex = j; | 911 *propertyIndex = j; |
912 *overwrite = false; | 912 *overwrite = false; |
913 return true; | 913 return true; |
914 } | 914 } |
915 } | 915 } |
916 if (!sourceRange.length() && ruleSourceData->ruleBodyRange.start <= sour ceRange.start && sourceRange.start <= ruleSourceData->ruleBodyRange.end) { | 916 if (!sourceRange.length() && ruleSourceData->ruleBodyRange.start <= sour ceRange.start && sourceRange.start <= ruleSourceData->ruleBodyRange.end) { |
917 *ruleId = InspectorCSSId(id(), i); | 917 *ruleIndex = i; |
918 *propertyIndex = propertyData.size(); | 918 *propertyIndex = propertyData.size(); |
919 *overwrite = false; | 919 *overwrite = false; |
920 return true; | 920 return true; |
921 } | 921 } |
922 } | 922 } |
923 return false; | 923 return false; |
924 } | 924 } |
925 | 925 |
926 PassRefPtrWillBeRawPtr<InspectorStyleSheet> InspectorStyleSheet::create(Inspecto rResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyle Sheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const St ring& documentURL, InspectorCSSAgent* cssAgent) | 926 PassRefPtrWillBeRawPtr<InspectorStyleSheet> InspectorStyleSheet::create(Inspecto rResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyle Sheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const St ring& documentURL, InspectorCSSAgent* cssAgent) |
927 { | 927 { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
984 m_pageStyleSheet->contents()->parseString(text); | 984 m_pageStyleSheet->contents()->parseString(text); |
985 } | 985 } |
986 | 986 |
987 if (listener()) | 987 if (listener()) |
988 listener()->didReparseStyleSheet(); | 988 listener()->didReparseStyleSheet(); |
989 onStyleSheetTextChanged(); | 989 onStyleSheetTextChanged(); |
990 m_pageStyleSheet->ownerDocument()->styleResolverChanged(FullStyleUpdate); | 990 m_pageStyleSheet->ownerDocument()->styleResolverChanged(FullStyleUpdate); |
991 return true; | 991 return true; |
992 } | 992 } |
993 | 993 |
994 String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat e& exceptionState) | 994 String InspectorStyleSheet::ruleSelector(unsigned ruleIndex, ExceptionState& exc eptionState) |
995 { | 995 { |
996 CSSStyleRule* rule = ruleForId(id); | 996 CSSStyleRule* rule = ruleAt(ruleIndex); |
997 if (!rule) { | 997 if (!rule) { |
998 exceptionState.throwDOMException(NotFoundError, "No rule was found for t he given ID."); | 998 exceptionState.throwDOMException(NotFoundError, "No rule was found for t he given ID."); |
999 return ""; | 999 return ""; |
1000 } | 1000 } |
1001 return rule->selectorText(); | 1001 return rule->selectorText(); |
1002 } | 1002 } |
1003 | 1003 |
1004 bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String & selector, ExceptionState& exceptionState) | 1004 bool InspectorStyleSheet::setRuleSelector(unsigned ruleIndex, const String& sele ctor, ExceptionState& exceptionState) |
1005 { | 1005 { |
1006 CSSStyleRule* rule = ruleForId(id); | 1006 CSSStyleRule* rule = ruleAt(ruleIndex); |
1007 if (!rule) { | 1007 if (!rule) { |
1008 exceptionState.throwDOMException(NotFoundError, "No rule was found for t he given ID."); | 1008 exceptionState.throwDOMException(NotFoundError, "No rule was found for t he given ID."); |
1009 return false; | 1009 return false; |
1010 } | 1010 } |
1011 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); | 1011 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); |
1012 if (!styleSheet || !ensureParsedDataReady()) { | 1012 if (!styleSheet || !ensureParsedDataReady()) { |
1013 exceptionState.throwDOMException(NotFoundError, "No stylesheet could be found in which to set the selector."); | 1013 exceptionState.throwDOMException(NotFoundError, "No stylesheet could be found in which to set the selector."); |
1014 return false; | 1014 return false; |
1015 } | 1015 } |
1016 | 1016 |
1017 if (!verifySelectorText(selector)) { | 1017 if (!verifySelectorText(selector)) { |
1018 exceptionState.throwDOMException(SyntaxError, "Selector text is not vali d."); | 1018 exceptionState.throwDOMException(SyntaxError, "Selector text is not vali d."); |
1019 return false; | 1019 return false; |
1020 } | 1020 } |
1021 | 1021 |
1022 rule->setSelectorText(selector); | 1022 rule->setSelectorText(selector); |
1023 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(id.ordin al()); | 1023 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(ruleInde x); |
1024 ASSERT(sourceData); | 1024 ASSERT(sourceData); |
1025 | 1025 |
1026 String sheetText = m_parsedStyleSheet->text(); | 1026 String sheetText = m_parsedStyleSheet->text(); |
1027 sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderR ange.length(), selector); | 1027 sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderR ange.length(), selector); |
1028 updateText(sheetText); | 1028 updateText(sheetText); |
1029 onStyleSheetTextChanged(); | 1029 onStyleSheetTextChanged(); |
1030 return true; | 1030 return true; |
1031 } | 1031 } |
1032 | 1032 |
1033 String InspectorStyleSheet::mediaRuleText(const InspectorCSSId& id, ExceptionSta te& exceptionState) | 1033 String InspectorStyleSheet::mediaRuleText(unsigned ruleIndex, ExceptionState& ex ceptionState) |
1034 { | 1034 { |
1035 CSSMediaRule* rule = mediaRuleForId(id); | 1035 CSSMediaRule* rule = mediaRuleAt(ruleIndex); |
1036 if (!rule) { | 1036 if (!rule) { |
1037 exceptionState.throwDOMException(NotFoundError, "No media rule was found for the given ID."); | 1037 exceptionState.throwDOMException(NotFoundError, "No media rule was found for the given ID."); |
1038 return ""; | 1038 return ""; |
1039 } | 1039 } |
1040 return rule->media()->mediaText(); | 1040 return rule->media()->mediaText(); |
1041 } | 1041 } |
1042 | 1042 |
1043 bool InspectorStyleSheet::setMediaRuleText(const InspectorCSSId& id, const Strin g& text, ExceptionState& exceptionState) | 1043 bool InspectorStyleSheet::setMediaRuleText(unsigned ruleIndex, const String& tex t, ExceptionState& exceptionState) |
1044 { | 1044 { |
1045 CSSMediaRule* rule = mediaRuleForId(id); | 1045 CSSMediaRule* rule = mediaRuleAt(ruleIndex); |
1046 if (!rule) { | 1046 if (!rule) { |
1047 exceptionState.throwDOMException(NotFoundError, "No media rule was found for the given ID."); | 1047 exceptionState.throwDOMException(NotFoundError, "No media rule was found for the given ID."); |
1048 return false; | 1048 return false; |
1049 } | 1049 } |
1050 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); | 1050 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); |
1051 if (!styleSheet || !ensureParsedDataReady()) { | 1051 if (!styleSheet || !ensureParsedDataReady()) { |
1052 exceptionState.throwDOMException(NotFoundError, "No stylesheet could be found in which to set the media text."); | 1052 exceptionState.throwDOMException(NotFoundError, "No stylesheet could be found in which to set the media text."); |
1053 return false; | 1053 return false; |
1054 } | 1054 } |
1055 if (!verifyMediaText(text)) { | 1055 if (!verifyMediaText(text)) { |
1056 exceptionState.throwDOMException(SyntaxError, "Media text is not valid." ); | 1056 exceptionState.throwDOMException(SyntaxError, "Media text is not valid." ); |
1057 return false; | 1057 return false; |
1058 } | 1058 } |
1059 | 1059 |
1060 rule->media()->setMediaText(text); | 1060 rule->media()->setMediaText(text); |
1061 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(id.ordin al()); | 1061 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(ruleInde x); |
1062 ASSERT(sourceData && sourceData->mediaSourceData); | 1062 ASSERT(sourceData && sourceData->mediaSourceData); |
1063 | 1063 |
1064 String sheetText = m_parsedStyleSheet->text(); | 1064 String sheetText = m_parsedStyleSheet->text(); |
1065 sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderR ange.length(), text); | 1065 sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderR ange.length(), text); |
1066 updateText(sheetText); | 1066 updateText(sheetText); |
1067 onStyleSheetTextChanged(); | 1067 onStyleSheetTextChanged(); |
1068 return true; | 1068 return true; |
1069 } | 1069 } |
1070 | 1070 |
1071 unsigned InspectorStyleSheet::ruleIndexBySourceRange(const CSSMediaRule* parentM ediaRule, const SourceRange& sourceRange) | 1071 unsigned InspectorStyleSheet::ruleIndexBySourceRange(const CSSMediaRule* parentM ediaRule, const SourceRange& sourceRange) |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1257 | 1257 |
1258 text.insert(ruleText, location.start); | 1258 text.insert(ruleText, location.start); |
1259 | 1259 |
1260 updateText(text); | 1260 updateText(text); |
1261 m_flatRules.clear(); | 1261 m_flatRules.clear(); |
1262 | 1262 |
1263 onStyleSheetTextChanged(); | 1263 onStyleSheetTextChanged(); |
1264 return styleRule; | 1264 return styleRule; |
1265 } | 1265 } |
1266 | 1266 |
1267 bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, const String& old Text, ExceptionState& exceptionState) | 1267 bool InspectorStyleSheet::deleteRule(unsigned ruleIndex, const String& oldText, ExceptionState& exceptionState) |
1268 { | 1268 { |
1269 RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id); | 1269 RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleAt(ruleIndex); |
1270 if (!rule) { | 1270 if (!rule) { |
1271 exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); | 1271 exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); |
1272 return false; | 1272 return false; |
1273 } | 1273 } |
1274 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); | 1274 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); |
1275 if (!styleSheet || !ensureParsedDataReady()) { | 1275 if (!styleSheet || !ensureParsedDataReady()) { |
1276 exceptionState.throwDOMException(NotFoundError, "No parent stylesheet co uld be found."); | 1276 exceptionState.throwDOMException(NotFoundError, "No parent stylesheet co uld be found."); |
1277 return false; | 1277 return false; |
1278 } | 1278 } |
1279 | 1279 |
1280 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(id.ordin al()); | 1280 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(ruleInde x); |
1281 if (!sourceData) { | 1281 if (!sourceData) { |
1282 exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); | 1282 exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); |
1283 return false; | 1283 return false; |
1284 } | 1284 } |
1285 | 1285 |
1286 CSSRule* parentRule = rule->parentRule(); | 1286 CSSRule* parentRule = rule->parentRule(); |
1287 if (parentRule) { | 1287 if (parentRule) { |
1288 if (parentRule->type() != CSSRule::MEDIA_RULE) { | 1288 if (parentRule->type() != CSSRule::MEDIA_RULE) { |
1289 exceptionState.throwDOMException(NotFoundError, "Cannot remove rule from non-media rule."); | 1289 exceptionState.throwDOMException(NotFoundError, "Cannot remove rule from non-media rule."); |
1290 return false; | 1290 return false; |
(...skipping 25 matching lines...) Expand all Loading... | |
1316 void InspectorStyleSheet::updateText(const String& newText) | 1316 void InspectorStyleSheet::updateText(const String& newText) |
1317 { | 1317 { |
1318 Element* element = ownerStyleElement(); | 1318 Element* element = ownerStyleElement(); |
1319 if (element) | 1319 if (element) |
1320 m_cssAgent->addEditedStyleElement(DOMNodeIds::idForNode(element), newTex t); | 1320 m_cssAgent->addEditedStyleElement(DOMNodeIds::idForNode(element), newTex t); |
1321 else | 1321 else |
1322 m_cssAgent->addEditedStyleSheet(finalURL(), newText); | 1322 m_cssAgent->addEditedStyleSheet(finalURL(), newText); |
1323 m_parsedStyleSheet->setText(newText); | 1323 m_parsedStyleSheet->setText(newText); |
1324 } | 1324 } |
1325 | 1325 |
1326 CSSStyleRule* InspectorStyleSheet::ruleForId(const InspectorCSSId& id) const | 1326 CSSStyleRule* InspectorStyleSheet::ruleAt(unsigned ruleIndex) const |
1327 { | 1327 { |
1328 ASSERT(!id.isEmpty()); | |
1329 ensureFlatRules(); | 1328 ensureFlatRules(); |
1330 return InspectorCSSAgent::asCSSStyleRule(id.ordinal() >= m_flatRules.size() ? nullptr : m_flatRules.at(id.ordinal()).get()); | 1329 return InspectorCSSAgent::asCSSStyleRule(ruleIndex >= m_flatRules.size() ? n ullptr : m_flatRules.at(ruleIndex).get()); |
1331 } | 1330 } |
1332 | 1331 |
1333 CSSMediaRule* InspectorStyleSheet::mediaRuleForId(const InspectorCSSId& id) cons t | 1332 CSSMediaRule* InspectorStyleSheet::mediaRuleAt(unsigned ruleIndex) const |
1334 { | 1333 { |
1335 ASSERT(!id.isEmpty()); | 1334 ASSERT(!id().isEmpty()); |
1336 ensureFlatRules(); | 1335 ensureFlatRules(); |
1337 return InspectorCSSAgent::asCSSMediaRule(id.ordinal() >= m_flatRules.size() ? nullptr : m_flatRules.at(id.ordinal()).get()); | 1336 return InspectorCSSAgent::asCSSMediaRule(ruleIndex >= m_flatRules.size() ? n ullptr : m_flatRules.at(ruleIndex).get()); |
1338 } | 1337 } |
1339 | 1338 |
1340 PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> InspectorStyleSheet::buildObje ctForStyleSheetInfo() const | 1339 PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> InspectorStyleSheet::buildObje ctForStyleSheetInfo() const |
1341 { | 1340 { |
1342 CSSStyleSheet* styleSheet = pageStyleSheet(); | 1341 CSSStyleSheet* styleSheet = pageStyleSheet(); |
1343 if (!styleSheet) | 1342 if (!styleSheet) |
1344 return nullptr; | 1343 return nullptr; |
1345 | 1344 |
1346 Document* document = styleSheet->ownerDocument(); | 1345 Document* document = styleSheet->ownerDocument(); |
1347 LocalFrame* frame = document ? document->frame() : nullptr; | 1346 LocalFrame* frame = document ? document->frame() : nullptr; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1389 simpleSelector->setRange(buildSourceRangeObject(range, lineEndings())); | 1388 simpleSelector->setRange(buildSourceRangeObject(range, lineEndings())); |
1390 result->addItem(simpleSelector.release()); | 1389 result->addItem(simpleSelector.release()); |
1391 } | 1390 } |
1392 return result.release(); | 1391 return result.release(); |
1393 } | 1392 } |
1394 | 1393 |
1395 PassRefPtr<TypeBuilder::CSS::SelectorList> InspectorStyleSheet::buildObjectForSe lectorList(CSSStyleRule* rule) | 1394 PassRefPtr<TypeBuilder::CSS::SelectorList> InspectorStyleSheet::buildObjectForSe lectorList(CSSStyleRule* rule) |
1396 { | 1395 { |
1397 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr; | 1396 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr; |
1398 if (ensureParsedDataReady()) | 1397 if (ensureParsedDataReady()) |
1399 sourceData = ruleSourceDataAt(styleId(rule->style()).ordinal()); | 1398 sourceData = ruleSourceDataAt(indexOf(rule->style())); |
1400 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > selectors; | 1399 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > selectors; |
1401 | 1400 |
1402 // This intentionally does not rely on the source data to avoid catching the trailing comments (before the declaration starting '{'). | 1401 // This intentionally does not rely on the source data to avoid catching the trailing comments (before the declaration starting '{'). |
1403 String selectorText = rule->selectorText(); | 1402 String selectorText = rule->selectorText(); |
1404 | 1403 |
1405 if (sourceData) | 1404 if (sourceData) |
1406 selectors = selectorsFromSource(sourceData.get(), m_parsedStyleSheet->te xt()); | 1405 selectors = selectorsFromSource(sourceData.get(), m_parsedStyleSheet->te xt()); |
1407 else { | 1406 else { |
1408 selectors = TypeBuilder::Array<TypeBuilder::CSS::Selector>::create(); | 1407 selectors = TypeBuilder::Array<TypeBuilder::CSS::Selector>::create(); |
1409 const CSSSelectorList& selectorList = rule->styleRule()->selectorList(); | 1408 const CSSSelectorList& selectorList = rule->styleRule()->selectorList(); |
(...skipping 17 matching lines...) Expand all Loading... | |
1427 CSSStyleSheet* styleSheet = pageStyleSheet(); | 1426 CSSStyleSheet* styleSheet = pageStyleSheet(); |
1428 if (!styleSheet) | 1427 if (!styleSheet) |
1429 return nullptr; | 1428 return nullptr; |
1430 | 1429 |
1431 RefPtr<TypeBuilder::CSS::CSSRule> result = TypeBuilder::CSS::CSSRule::create () | 1430 RefPtr<TypeBuilder::CSS::CSSRule> result = TypeBuilder::CSS::CSSRule::create () |
1432 .setSelectorList(buildObjectForSelectorList(rule)) | 1431 .setSelectorList(buildObjectForSelectorList(rule)) |
1433 .setOrigin(m_origin) | 1432 .setOrigin(m_origin) |
1434 .setStyle(buildObjectForStyle(rule->style())); | 1433 .setStyle(buildObjectForStyle(rule->style())); |
1435 | 1434 |
1436 if (canBind(m_origin)) { | 1435 if (canBind(m_origin)) { |
1437 InspectorCSSId id(ruleId(rule)); | 1436 if (!id().isEmpty()) |
1438 if (!id.isEmpty()) | 1437 result->setStyleSheetId(id()); |
1439 result->setStyleSheetId(id.styleSheetId()); | |
1440 } | 1438 } |
1441 | 1439 |
1442 if (mediaStack) | 1440 if (mediaStack) |
1443 result->setMedia(mediaStack); | 1441 result->setMedia(mediaStack); |
1444 | 1442 |
1445 return result.release(); | 1443 return result.release(); |
1446 } | 1444 } |
1447 | 1445 |
1448 bool InspectorStyleSheet::getText(String* result) const | 1446 bool InspectorStyleSheet::getText(String* result) const |
1449 { | 1447 { |
1450 if (!ensureText()) | 1448 if (!ensureText()) |
1451 return false; | 1449 return false; |
1452 *result = m_parsedStyleSheet->text(); | 1450 *result = m_parsedStyleSheet->text(); |
1453 return true; | 1451 return true; |
1454 } | 1452 } |
1455 | 1453 |
1456 CSSStyleDeclaration* InspectorStyleSheet::styleForId(const InspectorCSSId& id) c onst | 1454 CSSStyleDeclaration* InspectorStyleSheet::styleAt(unsigned ruleIndex) const |
1457 { | 1455 { |
1458 CSSStyleRule* rule = ruleForId(id); | 1456 CSSStyleRule* rule = ruleAt(ruleIndex); |
1459 if (!rule) | 1457 if (!rule) |
1460 return nullptr; | 1458 return nullptr; |
1461 | 1459 |
1462 return rule->style(); | 1460 return rule->style(); |
1463 } | 1461 } |
1464 | 1462 |
1465 PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceR ange(const CSSRule* rule) | 1463 PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceR ange(const CSSRule* rule) |
1466 { | 1464 { |
1467 if (!ensureParsedDataReady()) | 1465 if (!ensureParsedDataReady()) |
1468 return nullptr; | 1466 return nullptr; |
(...skipping 19 matching lines...) Expand all Loading... | |
1488 return nullptr; | 1486 return nullptr; |
1489 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleS ourceDataAt(static_cast<unsigned>(index)); | 1487 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleS ourceDataAt(static_cast<unsigned>(index)); |
1490 if (!sourceData->mediaSourceData || mediaQueryIndex >= sourceData->mediaSour ceData->queryData.size()) | 1488 if (!sourceData->mediaSourceData || mediaQueryIndex >= sourceData->mediaSour ceData->queryData.size()) |
1491 return nullptr; | 1489 return nullptr; |
1492 RefPtrWillBeRawPtr<CSSMediaQuerySourceData> mediaQueryData = sourceData->med iaSourceData->queryData.at(mediaQueryIndex); | 1490 RefPtrWillBeRawPtr<CSSMediaQuerySourceData> mediaQueryData = sourceData->med iaSourceData->queryData.at(mediaQueryIndex); |
1493 if (mediaQueryExpIndex >= mediaQueryData->expData.size()) | 1491 if (mediaQueryExpIndex >= mediaQueryData->expData.size()) |
1494 return nullptr; | 1492 return nullptr; |
1495 return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex) .valueRange, lineEndings()); | 1493 return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex) .valueRange, lineEndings()); |
1496 } | 1494 } |
1497 | 1495 |
1498 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheet::inspectorStyleForId( const InspectorCSSId& id) | 1496 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheet::inspectorStyleAt(uns igned ruleIndex) |
1499 { | 1497 { |
1500 CSSStyleDeclaration* style = styleForId(id); | 1498 CSSStyleDeclaration* style = styleAt(ruleIndex); |
1501 if (!style) | 1499 if (!style) |
1502 return nullptr; | 1500 return nullptr; |
1503 | 1501 |
1504 return InspectorStyle::create(id, style, this); | 1502 return InspectorStyle::create(ruleIndex, style, this); |
1505 } | 1503 } |
1506 | 1504 |
1507 unsigned InspectorStyleSheet::ruleCount() | 1505 unsigned InspectorStyleSheet::ruleCount() |
1508 { | 1506 { |
1509 return m_parsedStyleSheet->ruleCount(); | 1507 return m_parsedStyleSheet->ruleCount(); |
1510 } | 1508 } |
1511 | 1509 |
1512 String InspectorStyleSheet::sourceURL() const | 1510 String InspectorStyleSheet::sourceURL() const |
1513 { | 1511 { |
1514 if (!m_sourceURL.isNull()) | 1512 if (!m_sourceURL.isNull()) |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1577 bool deprecated; | 1575 bool deprecated; |
1578 String commentValue = ContentSearchUtils::findSourceMapURL(styleSheetTex t, ContentSearchUtils::CSSMagicComment, &deprecated); | 1576 String commentValue = ContentSearchUtils::findSourceMapURL(styleSheetTex t, ContentSearchUtils::CSSMagicComment, &deprecated); |
1579 if (!commentValue.isEmpty()) { | 1577 if (!commentValue.isEmpty()) { |
1580 // FIXME: add deprecated console message here. | 1578 // FIXME: add deprecated console message here. |
1581 return commentValue; | 1579 return commentValue; |
1582 } | 1580 } |
1583 } | 1581 } |
1584 return m_pageStyleSheet->contents()->sourceMapURL(); | 1582 return m_pageStyleSheet->contents()->sourceMapURL(); |
1585 } | 1583 } |
1586 | 1584 |
1587 InspectorCSSId InspectorStyleSheet::styleId(CSSStyleDeclaration* style) const | 1585 unsigned InspectorStyleSheet::indexOf(CSSStyleDeclaration* style) const |
1588 { | 1586 { |
1589 unsigned index = ruleIndexByStyle(style); | 1587 ensureFlatRules(); |
1590 if (index != UINT_MAX) | 1588 for (unsigned i = 0, size = m_flatRules.size(); i < size; ++i) { |
1591 return InspectorCSSId(id(), index); | 1589 CSSStyleRule* styleRule = InspectorCSSAgent::asCSSStyleRule(m_flatRules. at(i).get()); |
1592 return InspectorCSSId(); | 1590 if (styleRule && styleRule->style() == style) |
1591 return i; | |
1592 } | |
1593 return 0; | |
1593 } | 1594 } |
1594 | 1595 |
1595 bool InspectorStyleSheet::findRuleBySelectorRange(const SourceRange& sourceRange , InspectorCSSId* ruleId) | 1596 bool InspectorStyleSheet::findRuleBySelectorRange(const SourceRange& sourceRange , unsigned* ruleIndex) |
1596 { | 1597 { |
1597 if (!ensureParsedDataReady()) | 1598 if (!ensureParsedDataReady()) |
1598 return false; | 1599 return false; |
1599 for (size_t i = 0; i < ruleCount(); ++i) { | 1600 for (size_t i = 0; i < ruleCount(); ++i) { |
1600 RefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceData = ruleSourceDataAt( i); | 1601 RefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceData = ruleSourceDataAt( i); |
1601 if (!ruleSourceData->styleSourceData) | 1602 if (!ruleSourceData->styleSourceData) |
1602 continue; | 1603 continue; |
1603 if (ruleSourceData->ruleHeaderRange.start == sourceRange.start && ruleSo urceData->ruleHeaderRange.end == sourceRange.end) { | 1604 if (ruleSourceData->ruleHeaderRange.start == sourceRange.start && ruleSo urceData->ruleHeaderRange.end == sourceRange.end) { |
1604 *ruleId = InspectorCSSId(id(), i); | 1605 *ruleIndex = i; |
1605 return true; | 1606 return true; |
1606 } | 1607 } |
1607 } | 1608 } |
1608 return false; | 1609 return false; |
1609 } | 1610 } |
1610 | 1611 |
1611 bool InspectorStyleSheet::findMediaRuleByRange(const SourceRange& sourceRange, I nspectorCSSId* ruleId) | 1612 bool InspectorStyleSheet::findMediaRuleByRange(const SourceRange& sourceRange, u nsigned* ruleIndex) |
1612 { | 1613 { |
1613 if (!ensureParsedDataReady()) | 1614 if (!ensureParsedDataReady()) |
1614 return false; | 1615 return false; |
1615 for (size_t i = 0; i < ruleCount(); ++i) { | 1616 for (size_t i = 0; i < ruleCount(); ++i) { |
1616 RefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceData = ruleSourceDataAt( i); | 1617 RefPtrWillBeRawPtr<CSSRuleSourceData> ruleSourceData = ruleSourceDataAt( i); |
1617 if (!ruleSourceData->mediaSourceData) | 1618 if (!ruleSourceData->mediaSourceData) |
1618 continue; | 1619 continue; |
1619 if (ruleSourceData->ruleHeaderRange.start == sourceRange.start && ruleSo urceData->ruleHeaderRange.end == sourceRange.end) { | 1620 if (ruleSourceData->ruleHeaderRange.start == sourceRange.start && ruleSo urceData->ruleHeaderRange.end == sourceRange.end) { |
1620 *ruleId = InspectorCSSId(id(), i); | 1621 *ruleIndex = i; |
1621 return true; | 1622 return true; |
1622 } | 1623 } |
1623 } | 1624 } |
1624 return false; | 1625 return false; |
1625 } | 1626 } |
1626 | 1627 |
1627 const CSSRuleVector& InspectorStyleSheet::flatRules() | 1628 const CSSRuleVector& InspectorStyleSheet::flatRules() |
1628 { | 1629 { |
1629 ensureFlatRules(); | 1630 ensureFlatRules(); |
1630 return m_flatRules; | 1631 return m_flatRules; |
1631 } | 1632 } |
1632 | 1633 |
1633 Document* InspectorStyleSheet::ownerDocument() const | 1634 Document* InspectorStyleSheet::ownerDocument() const |
1634 { | 1635 { |
1635 return m_pageStyleSheet->ownerDocument(); | 1636 return m_pageStyleSheet->ownerDocument(); |
1636 } | 1637 } |
1637 | 1638 |
1638 PassRefPtrWillBeRawPtr<CSSRuleSourceData> InspectorStyleSheet::ruleSourceDataAt( unsigned ruleIndex) const | 1639 PassRefPtrWillBeRawPtr<CSSRuleSourceData> InspectorStyleSheet::ruleSourceDataAt( unsigned ruleIndex) const |
1639 { | 1640 { |
1640 return m_parsedStyleSheet->ruleSourceDataAt(ruleIndex); | 1641 return m_parsedStyleSheet->ruleSourceDataAt(ruleIndex); |
1641 } | 1642 } |
1642 | 1643 |
1643 unsigned InspectorStyleSheet::ruleIndexByStyle(CSSStyleDeclaration* pageStyle) c onst | |
1644 { | |
1645 ensureFlatRules(); | |
1646 for (unsigned i = 0, size = m_flatRules.size(); i < size; ++i) { | |
1647 CSSStyleRule* styleRule = InspectorCSSAgent::asCSSStyleRule(m_flatRules. at(i).get()); | |
1648 if (styleRule && styleRule->style() == pageStyle) | |
1649 return i; | |
1650 } | |
1651 return UINT_MAX; | |
1652 } | |
1653 | |
1654 bool InspectorStyleSheet::ensureParsedDataReady() | 1644 bool InspectorStyleSheet::ensureParsedDataReady() |
1655 { | 1645 { |
1656 return ensureText() && m_parsedStyleSheet->ensureSourceData(); | 1646 return ensureText() && m_parsedStyleSheet->ensureSourceData(); |
1657 } | 1647 } |
1658 | 1648 |
1659 bool InspectorStyleSheet::ensureText() const | 1649 bool InspectorStyleSheet::ensureText() const |
1660 { | 1650 { |
1661 if (m_parsedStyleSheet->hasText()) | 1651 if (m_parsedStyleSheet->hasText()) |
1662 return true; | 1652 return true; |
1663 | 1653 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1701 } | 1691 } |
1702 } | 1692 } |
1703 | 1693 |
1704 void InspectorStyleSheet::ensureFlatRules() const | 1694 void InspectorStyleSheet::ensureFlatRules() const |
1705 { | 1695 { |
1706 // We are fine with redoing this for empty stylesheets as this will run fast . | 1696 // We are fine with redoing this for empty stylesheets as this will run fast . |
1707 if (m_flatRules.isEmpty()) | 1697 if (m_flatRules.isEmpty()) |
1708 collectFlatRules(pageStyleSheet(), &m_flatRules); | 1698 collectFlatRules(pageStyleSheet(), &m_flatRules); |
1709 } | 1699 } |
1710 | 1700 |
1711 bool InspectorStyleSheet::setStyleText(const InspectorCSSId& id, const String& t ext) | 1701 bool InspectorStyleSheet::setStyleText(unsigned ruleIndex, const String& text) |
1712 { | 1702 { |
1713 CSSStyleDeclaration* style = styleForId(id); | 1703 CSSStyleDeclaration* style = styleAt(ruleIndex); |
1714 if (!style) | 1704 if (!style) |
1715 return false; | 1705 return false; |
1716 | 1706 |
1717 if (!ensureParsedDataReady()) | 1707 if (!ensureParsedDataReady()) |
1718 return false; | 1708 return false; |
1719 | 1709 |
1720 String patchedStyleSheetText; | 1710 String patchedStyleSheetText; |
1721 bool success = styleSheetTextWithChangedStyle(style, text, &patchedStyleShee tText); | 1711 bool success = styleSheetTextWithChangedStyle(style, text, &patchedStyleShee tText); |
1722 if (!success) | 1712 if (!success) |
1723 return false; | 1713 return false; |
1724 | 1714 |
1725 TrackExceptionState exceptionState; | 1715 TrackExceptionState exceptionState; |
1726 style->setCSSText(text, exceptionState); | 1716 style->setCSSText(text, exceptionState); |
1727 if (!exceptionState.hadException()) { | 1717 if (!exceptionState.hadException()) { |
1728 updateText(patchedStyleSheetText); | 1718 updateText(patchedStyleSheetText); |
1729 onStyleSheetTextChanged(); | 1719 onStyleSheetTextChanged(); |
1730 } | 1720 } |
1731 | 1721 |
1732 return !exceptionState.hadException(); | 1722 return !exceptionState.hadException(); |
1733 } | 1723 } |
1734 | 1724 |
1735 bool InspectorStyleSheet::styleSheetTextWithChangedStyle(CSSStyleDeclaration* st yle, const String& newStyleText, String* result) | 1725 bool InspectorStyleSheet::styleSheetTextWithChangedStyle(CSSStyleDeclaration* st yle, const String& newStyleText, String* result) |
1736 { | 1726 { |
1737 if (!style) | 1727 if (!style) |
1738 return false; | 1728 return false; |
1739 if (!ensureParsedDataReady()) | 1729 if (!ensureParsedDataReady()) |
1740 return false; | 1730 return false; |
1741 | 1731 |
1742 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(styleId( style).ordinal()); | 1732 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(indexOf( style)); |
1743 unsigned bodyStart = sourceData->ruleBodyRange.start; | 1733 unsigned bodyStart = sourceData->ruleBodyRange.start; |
1744 unsigned bodyEnd = sourceData->ruleBodyRange.end; | 1734 unsigned bodyEnd = sourceData->ruleBodyRange.end; |
1745 ASSERT(bodyStart <= bodyEnd); | 1735 ASSERT(bodyStart <= bodyEnd); |
1746 | 1736 |
1747 String text = m_parsedStyleSheet->text(); | 1737 String text = m_parsedStyleSheet->text(); |
1748 ASSERT_WITH_SECURITY_IMPLICATION(bodyEnd <= text.length()); // bodyEnd is ex clusive | 1738 ASSERT_WITH_SECURITY_IMPLICATION(bodyEnd <= text.length()); // bodyEnd is ex clusive |
1749 | 1739 |
1750 text.replace(bodyStart, bodyEnd - bodyStart, newStyleText); | 1740 text.replace(bodyStart, bodyEnd - bodyStart, newStyleText); |
1751 *result = text; | 1741 *result = text; |
1752 return true; | 1742 return true; |
1753 } | 1743 } |
1754 | 1744 |
1755 InspectorCSSId InspectorStyleSheet::ruleId(CSSStyleRule* rule) const | 1745 unsigned InspectorStyleSheet::indexOf(CSSStyleRule* rule) const |
1756 { | 1746 { |
1757 return styleId(rule->style()); | 1747 return indexOf(rule->style()); |
1758 } | 1748 } |
1759 | 1749 |
1760 bool InspectorStyleSheet::originalStyleSheetText(String* result) const | 1750 bool InspectorStyleSheet::originalStyleSheetText(String* result) const |
1761 { | 1751 { |
1762 bool success = inlineStyleSheetText(result); | 1752 bool success = inlineStyleSheetText(result); |
1763 if (!success) | 1753 if (!success) |
1764 success = resourceStyleSheetText(result); | 1754 success = resourceStyleSheetText(result); |
1765 return success; | 1755 return success; |
1766 } | 1756 } |
1767 | 1757 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1810 return adoptRefWillBeNoop(new InspectorStyleSheetForInlineStyle(id, element, listener)); | 1800 return adoptRefWillBeNoop(new InspectorStyleSheetForInlineStyle(id, element, listener)); |
1811 } | 1801 } |
1812 | 1802 |
1813 InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(const Strin g& id, PassRefPtrWillBeRawPtr<Element> element, Listener* listener) | 1803 InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(const Strin g& id, PassRefPtrWillBeRawPtr<Element> element, Listener* listener) |
1814 : InspectorStyleSheetBase(id, listener) | 1804 : InspectorStyleSheetBase(id, listener) |
1815 , m_element(element) | 1805 , m_element(element) |
1816 , m_ruleSourceData(nullptr) | 1806 , m_ruleSourceData(nullptr) |
1817 , m_isStyleTextValid(false) | 1807 , m_isStyleTextValid(false) |
1818 { | 1808 { |
1819 ASSERT(m_element); | 1809 ASSERT(m_element); |
1820 m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id, 0), inlineStyle (), this); | 1810 m_inspectorStyle = InspectorStyle::create(0, inlineStyle(), this); |
1821 m_styleText = m_element->isStyledElement() ? m_element->getAttribute("style" ).string() : String(); | 1811 m_styleText = m_element->isStyledElement() ? m_element->getAttribute("style" ).string() : String(); |
1822 } | 1812 } |
1823 | 1813 |
1824 void InspectorStyleSheetForInlineStyle::didModifyElementAttribute() | 1814 void InspectorStyleSheetForInlineStyle::didModifyElementAttribute() |
1825 { | 1815 { |
1826 m_isStyleTextValid = false; | 1816 m_isStyleTextValid = false; |
1827 if (m_element->isStyledElement() && m_element->style() != m_inspectorStyle-> cssStyle()) | 1817 if (m_element->isStyledElement() && m_element->style() != m_inspectorStyle-> cssStyle()) |
1828 m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id(), 0), inlin eStyle(), this); | 1818 m_inspectorStyle = InspectorStyle::create(0, inlineStyle(), this); |
1829 m_ruleSourceData.clear(); | 1819 m_ruleSourceData.clear(); |
1830 } | 1820 } |
1831 | 1821 |
1832 bool InspectorStyleSheetForInlineStyle::setText(const String& text, ExceptionSta te& exceptionState) | 1822 bool InspectorStyleSheetForInlineStyle::setText(const String& text, ExceptionSta te& exceptionState) |
1833 { | 1823 { |
1834 bool success = setStyleText(InspectorCSSId(id(), 0), text); | 1824 bool success = setStyleText(0, text); |
1835 if (!success) | 1825 if (!success) |
1836 exceptionState.throwDOMException(SyntaxError, "Style sheet text is inval id."); | 1826 exceptionState.throwDOMException(SyntaxError, "Style sheet text is inval id."); |
1837 return success; | 1827 return success; |
1838 } | 1828 } |
1839 | 1829 |
1840 bool InspectorStyleSheetForInlineStyle::getText(String* result) const | 1830 bool InspectorStyleSheetForInlineStyle::getText(String* result) const |
1841 { | 1831 { |
1842 if (!m_isStyleTextValid) { | 1832 if (!m_isStyleTextValid) { |
1843 m_styleText = elementStyleText(); | 1833 m_styleText = elementStyleText(); |
1844 m_isStyleTextValid = true; | 1834 m_isStyleTextValid = true; |
1845 } | 1835 } |
1846 *result = m_styleText; | 1836 *result = m_styleText; |
1847 return true; | 1837 return true; |
1848 } | 1838 } |
1849 | 1839 |
1850 bool InspectorStyleSheetForInlineStyle::setStyleText(const InspectorCSSId& id, c onst String& text) | 1840 bool InspectorStyleSheetForInlineStyle::setStyleText(unsigned ruleIndex, const S tring& text) |
1851 { | 1841 { |
1852 CSSStyleDeclaration* style = styleForId(id); | 1842 CSSStyleDeclaration* style = styleAt(ruleIndex); |
1853 if (!style) | 1843 if (!style) |
1854 return false; | 1844 return false; |
1855 ASSERT_UNUSED(style, style == inlineStyle()); | 1845 ASSERT_UNUSED(style, style == inlineStyle()); |
1856 TrackExceptionState exceptionState; | 1846 TrackExceptionState exceptionState; |
1857 | 1847 |
1858 { | 1848 { |
1859 InspectorCSSAgent::InlineStyleOverrideScope overrideScope(m_element->own erDocument()); | 1849 InspectorCSSAgent::InlineStyleOverrideScope overrideScope(m_element->own erDocument()); |
1860 m_element->setAttribute("style", AtomicString(text), exceptionState); | 1850 m_element->setAttribute("style", AtomicString(text), exceptionState); |
1861 } | 1851 } |
1862 if (!exceptionState.hadException()) { | 1852 if (!exceptionState.hadException()) { |
(...skipping 27 matching lines...) Expand all Loading... | |
1890 | 1880 |
1891 bool success = !!m_ruleSourceData; | 1881 bool success = !!m_ruleSourceData; |
1892 if (!success) { | 1882 if (!success) { |
1893 m_ruleSourceData = CSSRuleSourceData::create(StyleRule::Style); | 1883 m_ruleSourceData = CSSRuleSourceData::create(StyleRule::Style); |
1894 return false; | 1884 return false; |
1895 } | 1885 } |
1896 | 1886 |
1897 return true; | 1887 return true; |
1898 } | 1888 } |
1899 | 1889 |
1900 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheetForInlineStyle::inspec torStyleForId(const InspectorCSSId& id) | 1890 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheetForInlineStyle::inspec torStyleAt(unsigned ruleIndex) |
1901 { | 1891 { |
1902 ASSERT_UNUSED(id, !id.ordinal()); | 1892 ASSERT_UNUSED(!ruleIndex, !ruleIndex); |
kozy
2015/06/15 09:49:28
ASSERT_UNUSED(ruleIndex, !ruleIndex)
| |
1903 return m_inspectorStyle; | 1893 return m_inspectorStyle; |
1904 } | 1894 } |
1905 | 1895 |
1906 CSSStyleDeclaration* InspectorStyleSheetForInlineStyle::inlineStyle() const | 1896 CSSStyleDeclaration* InspectorStyleSheetForInlineStyle::inlineStyle() const |
1907 { | 1897 { |
1908 return m_element->style(); | 1898 return m_element->style(); |
1909 } | 1899 } |
1910 | 1900 |
1911 const String& InspectorStyleSheetForInlineStyle::elementStyleText() const | 1901 const String& InspectorStyleSheetForInlineStyle::elementStyleText() const |
1912 { | 1902 { |
(...skipping 20 matching lines...) Expand all Loading... | |
1933 | 1923 |
1934 DEFINE_TRACE(InspectorStyleSheetForInlineStyle) | 1924 DEFINE_TRACE(InspectorStyleSheetForInlineStyle) |
1935 { | 1925 { |
1936 visitor->trace(m_element); | 1926 visitor->trace(m_element); |
1937 visitor->trace(m_ruleSourceData); | 1927 visitor->trace(m_ruleSourceData); |
1938 visitor->trace(m_inspectorStyle); | 1928 visitor->trace(m_inspectorStyle); |
1939 InspectorStyleSheetBase::trace(visitor); | 1929 InspectorStyleSheetBase::trace(visitor); |
1940 } | 1930 } |
1941 | 1931 |
1942 } // namespace blink | 1932 } // namespace blink |
OLD | NEW |