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 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 | 497 |
498 if (rule->type() == CSSRule::KEYFRAMES_RULE) | 498 if (rule->type() == CSSRule::KEYFRAMES_RULE) |
499 return toCSSKeyframesRule(rule)->cssRules(); | 499 return toCSSKeyframesRule(rule)->cssRules(); |
500 | 500 |
501 if (rule->type() == CSSRule::SUPPORTS_RULE) | 501 if (rule->type() == CSSRule::SUPPORTS_RULE) |
502 return toCSSSupportsRule(rule)->cssRules(); | 502 return toCSSSupportsRule(rule)->cssRules(); |
503 | 503 |
504 return nullptr; | 504 return nullptr; |
505 } | 505 } |
506 | 506 |
507 PassRefPtr<InspectorStyle> InspectorStyle::create(const InspectorCSSId& styleId,
PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheet* parentStyleSheet) | 507 PassRefPtr<InspectorStyle> InspectorStyle::create(const InspectorCSSId& styleId,
PassRefPtr<CSSStyleDeclaration> style, InspectorStyleSheetBase* parentStyleShee
t) |
508 { | 508 { |
509 return adoptRef(new InspectorStyle(styleId, style, parentStyleSheet)); | 509 return adoptRef(new InspectorStyle(styleId, style, parentStyleSheet)); |
510 } | 510 } |
511 | 511 |
512 InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyl
eDeclaration> style, InspectorStyleSheet* parentStyleSheet) | 512 InspectorStyle::InspectorStyle(const InspectorCSSId& styleId, PassRefPtr<CSSStyl
eDeclaration> style, InspectorStyleSheetBase* parentStyleSheet) |
513 : m_styleId(styleId) | 513 : m_styleId(styleId) |
514 , m_style(style) | 514 , m_style(style) |
515 , m_parentStyleSheet(parentStyleSheet) | 515 , m_parentStyleSheet(parentStyleSheet) |
516 , m_formatAcquired(false) | 516 , m_formatAcquired(false) |
517 { | 517 { |
518 ASSERT(m_style); | 518 ASSERT(m_style); |
519 } | 519 } |
520 | 520 |
521 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con
st | 521 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con
st |
522 { | 522 { |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
823 } | 823 } |
824 } | 824 } |
825 | 825 |
826 m_format.first = formatLineFeed.toString(); | 826 m_format.first = formatLineFeed.toString(); |
827 m_format.second = isFullPrefixScanned ? prefix.toString() : candidatePrefix; | 827 m_format.second = isFullPrefixScanned ? prefix.toString() : candidatePrefix; |
828 return m_format; | 828 return m_format; |
829 } | 829 } |
830 | 830 |
831 Document* InspectorStyle::ownerDocument() const | 831 Document* InspectorStyle::ownerDocument() const |
832 { | 832 { |
833 return m_parentStyleSheet->pageStyleSheet() ? m_parentStyleSheet->pageStyleS
heet()->ownerDocument() : 0; | 833 return m_parentStyleSheet->ownerDocument(); |
| 834 } |
| 835 |
| 836 InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* lis
tener) |
| 837 : m_id(id) |
| 838 , m_listener(listener) |
| 839 { |
| 840 } |
| 841 |
| 842 bool InspectorStyleSheetBase::setPropertyText(const InspectorCSSId& id, unsigned
propertyIndex, const String& text, bool overwrite, String* oldText, ExceptionSt
ate& exceptionState) |
| 843 { |
| 844 RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); |
| 845 if (!inspectorStyle) { |
| 846 exceptionState.throwDOMException(NotFoundError, "No property could be fo
und for the given ID."); |
| 847 return false; |
| 848 } |
| 849 |
| 850 bool success = inspectorStyle->setPropertyText(propertyIndex, text, overwrit
e, oldText, exceptionState); |
| 851 if (success) |
| 852 fireStyleSheetChanged(); |
| 853 return success; |
| 854 } |
| 855 |
| 856 void InspectorStyleSheetBase::fireStyleSheetChanged() |
| 857 { |
| 858 if (listener()) |
| 859 listener()->styleSheetChanged(this); |
| 860 } |
| 861 |
| 862 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForSt
yle(CSSStyleDeclaration* style) |
| 863 { |
| 864 RefPtr<CSSRuleSourceData> sourceData; |
| 865 if (ensureParsedDataReady()) |
| 866 sourceData = ruleSourceDataFor(style); |
| 867 |
| 868 InspectorCSSId id = styleId(style); |
| 869 if (id.isEmpty()) { |
| 870 // Any rule coming from User Agent and not from DefaultStyleSheet will n
ot have id. |
| 871 // See InspectorCSSAgent::buildObjectForRule for details. |
| 872 RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(id, style
, this); |
| 873 return inspectorStyle->buildObjectForStyle(); |
| 874 } |
| 875 RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); |
| 876 RefPtr<TypeBuilder::CSS::CSSStyle> result = inspectorStyle->buildObjectForSt
yle(); |
| 877 |
| 878 // Style text cannot be retrieved without stylesheet, so set cssText here. |
| 879 if (sourceData) { |
| 880 String sheetText; |
| 881 bool success = getText(&sheetText); |
| 882 if (success) { |
| 883 const SourceRange& bodyRange = sourceData->ruleBodyRange; |
| 884 result->setCssText(sheetText.substring(bodyRange.start, bodyRange.en
d - bodyRange.start)); |
| 885 } |
| 886 } |
| 887 |
| 888 return result.release(); |
834 } | 889 } |
835 | 890 |
836 PassRefPtr<InspectorStyleSheet> InspectorStyleSheet::create(InspectorPageAgent*
pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtrWi
llBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::En
um origin, const String& documentURL, Listener* listener) | 891 PassRefPtr<InspectorStyleSheet> InspectorStyleSheet::create(InspectorPageAgent*
pageAgent, InspectorResourceAgent* resourceAgent, const String& id, PassRefPtrWi
llBeRawPtr<CSSStyleSheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::En
um origin, const String& documentURL, Listener* listener) |
837 { | 892 { |
838 return adoptRef(new InspectorStyleSheet(pageAgent, resourceAgent, id, pageSt
yleSheet, origin, documentURL, listener)); | 893 return adoptRef(new InspectorStyleSheet(pageAgent, resourceAgent, id, pageSt
yleSheet, origin, documentURL, listener)); |
839 } | 894 } |
840 | 895 |
841 InspectorStyleSheet::InspectorStyleSheet(InspectorPageAgent* pageAgent, Inspecto
rResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyle
Sheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const St
ring& documentURL, Listener* listener) | 896 InspectorStyleSheet::InspectorStyleSheet(InspectorPageAgent* pageAgent, Inspecto
rResourceAgent* resourceAgent, const String& id, PassRefPtrWillBeRawPtr<CSSStyle
Sheet> pageStyleSheet, TypeBuilder::CSS::StyleSheetOrigin::Enum origin, const St
ring& documentURL, Listener* listener) |
842 : m_pageAgent(pageAgent) | 897 : InspectorStyleSheetBase(id, listener) |
| 898 , m_pageAgent(pageAgent) |
843 , m_resourceAgent(resourceAgent) | 899 , m_resourceAgent(resourceAgent) |
844 , m_id(id) | |
845 , m_pageStyleSheet(pageStyleSheet) | 900 , m_pageStyleSheet(pageStyleSheet) |
846 , m_origin(origin) | 901 , m_origin(origin) |
847 , m_documentURL(documentURL) | 902 , m_documentURL(documentURL) |
848 , m_listener(listener) | |
849 { | 903 { |
850 m_parsedStyleSheet = adoptPtr(new ParsedStyleSheet(m_pageStyleSheet.get())); | 904 m_parsedStyleSheet = adoptPtr(new ParsedStyleSheet(m_pageStyleSheet.get())); |
851 } | 905 } |
852 | 906 |
853 InspectorStyleSheet::~InspectorStyleSheet() | 907 InspectorStyleSheet::~InspectorStyleSheet() |
854 { | 908 { |
855 } | 909 } |
856 | 910 |
857 static String styleSheetURL(CSSStyleSheet* pageStyleSheet) | 911 static String styleSheetURL(CSSStyleSheet* pageStyleSheet) |
858 { | 912 { |
859 if (pageStyleSheet && !pageStyleSheet->contents()->baseURL().isEmpty()) | 913 if (pageStyleSheet && !pageStyleSheet->contents()->baseURL().isEmpty()) |
860 return pageStyleSheet->contents()->baseURL().string(); | 914 return pageStyleSheet->contents()->baseURL().string(); |
861 return emptyString(); | 915 return emptyString(); |
862 } | 916 } |
863 | 917 |
864 String InspectorStyleSheet::finalURL() const | 918 String InspectorStyleSheet::finalURL() const |
865 { | 919 { |
866 String url = styleSheetURL(m_pageStyleSheet.get()); | 920 String url = styleSheetURL(m_pageStyleSheet.get()); |
867 return url.isEmpty() ? m_documentURL : url; | 921 return url.isEmpty() ? m_documentURL : url; |
868 } | 922 } |
869 | 923 |
870 void InspectorStyleSheet::reparseStyleSheet(const String& text) | 924 void InspectorStyleSheet::reparseStyleSheet(const String& text) |
871 { | 925 { |
872 if (m_listener) | 926 if (listener()) |
873 m_listener->willReparseStyleSheet(); | 927 listener()->willReparseStyleSheet(); |
874 | 928 |
875 { | 929 { |
876 // Have a separate scope for clearRules() (bug 95324). | 930 // Have a separate scope for clearRules() (bug 95324). |
877 CSSStyleSheet::RuleMutationScope mutationScope(m_pageStyleSheet.get()); | 931 CSSStyleSheet::RuleMutationScope mutationScope(m_pageStyleSheet.get()); |
878 m_pageStyleSheet->contents()->clearRules(); | 932 m_pageStyleSheet->contents()->clearRules(); |
879 m_pageStyleSheet->clearChildRuleCSSOMWrappers(); | 933 m_pageStyleSheet->clearChildRuleCSSOMWrappers(); |
880 } | 934 } |
881 { | 935 { |
882 CSSStyleSheet::RuleMutationScope mutationScope(m_pageStyleSheet.get()); | 936 CSSStyleSheet::RuleMutationScope mutationScope(m_pageStyleSheet.get()); |
883 m_pageStyleSheet->contents()->parseString(text); | 937 m_pageStyleSheet->contents()->parseString(text); |
884 } | 938 } |
885 | 939 |
886 if (m_listener) | 940 if (listener()) |
887 m_listener->didReparseStyleSheet(); | 941 listener()->didReparseStyleSheet(); |
888 fireStyleSheetChanged(); | 942 fireStyleSheetChanged(); |
889 m_pageStyleSheet->ownerDocument()->styleResolverChanged(RecalcStyleImmediate
ly, FullStyleUpdate); | 943 m_pageStyleSheet->ownerDocument()->styleResolverChanged(RecalcStyleImmediate
ly, FullStyleUpdate); |
890 } | 944 } |
891 | 945 |
892 bool InspectorStyleSheet::setText(const String& text, ExceptionState& exceptionS
tate) | 946 bool InspectorStyleSheet::setText(const String& text, ExceptionState& exceptionS
tate) |
893 { | 947 { |
894 if (!checkPageStyleSheet(exceptionState)) | |
895 return false; | |
896 if (!m_parsedStyleSheet) | |
897 return false; | |
898 | |
899 m_parsedStyleSheet->setText(text); | 948 m_parsedStyleSheet->setText(text); |
900 m_flatRules.clear(); | 949 m_flatRules.clear(); |
901 | 950 |
902 return true; | 951 return true; |
903 } | 952 } |
904 | 953 |
905 String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat
e& exceptionState) | 954 String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat
e& exceptionState) |
906 { | 955 { |
907 CSSStyleRule* rule = ruleForId(id); | 956 CSSStyleRule* rule = ruleForId(id); |
908 if (!rule) { | 957 if (!rule) { |
909 exceptionState.throwDOMException(NotFoundError, "No rule was found for t
he given ID."); | 958 exceptionState.throwDOMException(NotFoundError, "No rule was found for t
he given ID."); |
910 return ""; | 959 return ""; |
911 } | 960 } |
912 return rule->selectorText(); | 961 return rule->selectorText(); |
913 } | 962 } |
914 | 963 |
915 bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String
& selector, ExceptionState& exceptionState) | 964 bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String
& selector, ExceptionState& exceptionState) |
916 { | 965 { |
917 if (!checkPageStyleSheet(exceptionState)) | |
918 return false; | |
919 CSSStyleRule* rule = ruleForId(id); | 966 CSSStyleRule* rule = ruleForId(id); |
920 if (!rule) { | 967 if (!rule) { |
921 exceptionState.throwDOMException(NotFoundError, "No rule was found for t
he given ID."); | 968 exceptionState.throwDOMException(NotFoundError, "No rule was found for t
he given ID."); |
922 return false; | 969 return false; |
923 } | 970 } |
924 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); | 971 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); |
925 if (!styleSheet || !ensureParsedDataReady()) { | 972 if (!styleSheet || !ensureParsedDataReady()) { |
926 exceptionState.throwDOMException(NotFoundError, "No stylesheet could be
found in which to set the selector."); | 973 exceptionState.throwDOMException(NotFoundError, "No stylesheet could be
found in which to set the selector."); |
927 return false; | 974 return false; |
928 } | 975 } |
(...skipping 14 matching lines...) Expand all Loading... |
943 | 990 |
944 static bool checkStyleRuleSelector(Document* document, const String& selector) | 991 static bool checkStyleRuleSelector(Document* document, const String& selector) |
945 { | 992 { |
946 CSSSelectorList selectorList; | 993 CSSSelectorList selectorList; |
947 createCSSParser(document)->parseSelector(selector, selectorList); | 994 createCSSParser(document)->parseSelector(selector, selectorList); |
948 return selectorList.isValid(); | 995 return selectorList.isValid(); |
949 } | 996 } |
950 | 997 |
951 CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionStat
e& exceptionState) | 998 CSSStyleRule* InspectorStyleSheet::addRule(const String& selector, ExceptionStat
e& exceptionState) |
952 { | 999 { |
953 if (!checkPageStyleSheet(exceptionState)) | |
954 return 0; | |
955 if (!checkStyleRuleSelector(m_pageStyleSheet->ownerDocument(), selector)) { | 1000 if (!checkStyleRuleSelector(m_pageStyleSheet->ownerDocument(), selector)) { |
956 exceptionState.throwDOMException(SyntaxError, "The selector '" + selecto
r + "' could not be added."); | 1001 exceptionState.throwDOMException(SyntaxError, "The selector '" + selecto
r + "' could not be added."); |
957 return 0; | 1002 return 0; |
958 } | 1003 } |
959 | 1004 |
960 String text; | 1005 String text; |
961 bool success = getText(&text); | 1006 bool success = getText(&text); |
962 if (!success) { | 1007 if (!success) { |
963 exceptionState.throwDOMException(NotFoundError, "The selector '" + selec
tor + "' could not be added."); | 1008 exceptionState.throwDOMException(NotFoundError, "The selector '" + selec
tor + "' could not be added."); |
964 return 0; | 1009 return 0; |
(...skipping 26 matching lines...) Expand all Loading... |
991 // Using setText() as this operation changes the style sheet rule set. | 1036 // Using setText() as this operation changes the style sheet rule set. |
992 setText(styleSheetText.toString(), ASSERT_NO_EXCEPTION); | 1037 setText(styleSheetText.toString(), ASSERT_NO_EXCEPTION); |
993 | 1038 |
994 fireStyleSheetChanged(); | 1039 fireStyleSheetChanged(); |
995 | 1040 |
996 return styleRule; | 1041 return styleRule; |
997 } | 1042 } |
998 | 1043 |
999 bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, ExceptionState& e
xceptionState) | 1044 bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, ExceptionState& e
xceptionState) |
1000 { | 1045 { |
1001 if (!checkPageStyleSheet(exceptionState)) | |
1002 return false; | |
1003 RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id); | 1046 RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id); |
1004 if (!rule) { | 1047 if (!rule) { |
1005 exceptionState.throwDOMException(NotFoundError, "No style rule could be
found for the provided ID."); | 1048 exceptionState.throwDOMException(NotFoundError, "No style rule could be
found for the provided ID."); |
1006 return false; | 1049 return false; |
1007 } | 1050 } |
1008 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); | 1051 CSSStyleSheet* styleSheet = rule->parentStyleSheet(); |
1009 if (!styleSheet || !ensureParsedDataReady()) { | 1052 if (!styleSheet || !ensureParsedDataReady()) { |
1010 exceptionState.throwDOMException(NotFoundError, "No parent stylesheet co
uld be found."); | 1053 exceptionState.throwDOMException(NotFoundError, "No parent stylesheet co
uld be found."); |
1011 return false; | 1054 return false; |
1012 } | 1055 } |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1139 if (!id.isEmpty()) | 1182 if (!id.isEmpty()) |
1140 result->setRuleId(id.asProtocolValue<TypeBuilder::CSS::CSSRuleId>())
; | 1183 result->setRuleId(id.asProtocolValue<TypeBuilder::CSS::CSSRuleId>())
; |
1141 } | 1184 } |
1142 | 1185 |
1143 if (mediaStack) | 1186 if (mediaStack) |
1144 result->setMedia(mediaStack); | 1187 result->setMedia(mediaStack); |
1145 | 1188 |
1146 return result.release(); | 1189 return result.release(); |
1147 } | 1190 } |
1148 | 1191 |
1149 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheet::buildObjectForStyle(
CSSStyleDeclaration* style) | |
1150 { | |
1151 RefPtr<CSSRuleSourceData> sourceData; | |
1152 if (ensureParsedDataReady()) | |
1153 sourceData = ruleSourceDataFor(style); | |
1154 | |
1155 InspectorCSSId id = ruleIdByStyle(style); | |
1156 if (id.isEmpty()) { | |
1157 // Any rule coming from User Agent and not from DefaultStyleSheet will n
ot have id. | |
1158 // See InspectorCSSAgent::buildObjectForRule for details. | |
1159 RefPtr<InspectorStyle> inspectorStyle = InspectorStyle::create(id, style
, this); | |
1160 return inspectorStyle->buildObjectForStyle(); | |
1161 } | |
1162 RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); | |
1163 RefPtr<TypeBuilder::CSS::CSSStyle> result = inspectorStyle->buildObjectForSt
yle(); | |
1164 | |
1165 // Style text cannot be retrieved without stylesheet, so set cssText here. | |
1166 if (sourceData) { | |
1167 String sheetText; | |
1168 bool success = getText(&sheetText); | |
1169 if (success) { | |
1170 const SourceRange& bodyRange = sourceData->ruleBodyRange; | |
1171 result->setCssText(sheetText.substring(bodyRange.start, bodyRange.en
d - bodyRange.start)); | |
1172 } | |
1173 } | |
1174 | |
1175 return result.release(); | |
1176 } | |
1177 | |
1178 bool InspectorStyleSheet::setPropertyText(const InspectorCSSId& id, unsigned pro
pertyIndex, const String& text, bool overwrite, String* oldText, ExceptionState&
exceptionState) | |
1179 { | |
1180 RefPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); | |
1181 if (!inspectorStyle) { | |
1182 exceptionState.throwDOMException(NotFoundError, "No property could be fo
und for the given ID."); | |
1183 return false; | |
1184 } | |
1185 | |
1186 bool success = inspectorStyle->setPropertyText(propertyIndex, text, overwrit
e, oldText, exceptionState); | |
1187 if (success) | |
1188 fireStyleSheetChanged(); | |
1189 return success; | |
1190 } | |
1191 | |
1192 bool InspectorStyleSheet::getText(String* result) const | 1192 bool InspectorStyleSheet::getText(String* result) const |
1193 { | 1193 { |
1194 if (!ensureText()) | 1194 if (!ensureText()) |
1195 return false; | 1195 return false; |
1196 *result = m_parsedStyleSheet->text(); | 1196 *result = m_parsedStyleSheet->text(); |
1197 return true; | 1197 return true; |
1198 } | 1198 } |
1199 | 1199 |
1200 CSSStyleDeclaration* InspectorStyleSheet::styleForId(const InspectorCSSId& id) c
onst | 1200 CSSStyleDeclaration* InspectorStyleSheet::styleForId(const InspectorCSSId& id) c
onst |
1201 { | 1201 { |
1202 CSSStyleRule* rule = ruleForId(id); | 1202 CSSStyleRule* rule = ruleForId(id); |
1203 if (!rule) | 1203 if (!rule) |
1204 return 0; | 1204 return 0; |
1205 | 1205 |
1206 return rule->style(); | 1206 return rule->style(); |
1207 } | 1207 } |
1208 | 1208 |
1209 void InspectorStyleSheet::fireStyleSheetChanged() | |
1210 { | |
1211 if (m_listener) | |
1212 m_listener->styleSheetChanged(this); | |
1213 } | |
1214 | |
1215 PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceR
ange(const CSSRule* rule) | 1209 PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceR
ange(const CSSRule* rule) |
1216 { | 1210 { |
1217 if (!ensureParsedDataReady()) | 1211 if (!ensureParsedDataReady()) |
1218 return nullptr; | 1212 return nullptr; |
1219 | 1213 |
1220 RefPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleSourceDataAt(
ruleIndexByRule(rule)); | 1214 RefPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleSourceDataAt(
ruleIndexByRule(rule)); |
1221 if (!sourceData) | 1215 if (!sourceData) |
1222 return nullptr; | 1216 return nullptr; |
1223 return buildSourceRangeObject(sourceData->ruleHeaderRange, lineEndings().get
()); | 1217 return buildSourceRangeObject(sourceData->ruleHeaderRange, lineEndings().get
()); |
1224 } | 1218 } |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1359 return true; | 1353 return true; |
1360 } | 1354 } |
1361 | 1355 |
1362 bool InspectorStyleSheet::ensureParsedDataReady() | 1356 bool InspectorStyleSheet::ensureParsedDataReady() |
1363 { | 1357 { |
1364 return ensureText() && m_parsedStyleSheet->ensureSourceData(); | 1358 return ensureText() && m_parsedStyleSheet->ensureSourceData(); |
1365 } | 1359 } |
1366 | 1360 |
1367 bool InspectorStyleSheet::ensureText() const | 1361 bool InspectorStyleSheet::ensureText() const |
1368 { | 1362 { |
1369 if (!m_parsedStyleSheet) | |
1370 return false; | |
1371 if (m_parsedStyleSheet->hasText()) | 1363 if (m_parsedStyleSheet->hasText()) |
1372 return true; | 1364 return true; |
1373 | 1365 |
1374 String text; | 1366 String text; |
1375 bool success = originalStyleSheetText(&text); | 1367 bool success = originalStyleSheetText(&text); |
1376 if (success) | 1368 if (success) |
1377 m_parsedStyleSheet->setText(text); | 1369 m_parsedStyleSheet->setText(text); |
1378 // No need to clear m_flatRules here - it's empty. | 1370 // No need to clear m_flatRules here - it's empty. |
1379 | 1371 |
1380 return success; | 1372 return success; |
(...skipping 27 matching lines...) Expand all Loading... |
1408 | 1400 |
1409 void InspectorStyleSheet::ensureFlatRules() const | 1401 void InspectorStyleSheet::ensureFlatRules() const |
1410 { | 1402 { |
1411 // We are fine with redoing this for empty stylesheets as this will run fast
. | 1403 // We are fine with redoing this for empty stylesheets as this will run fast
. |
1412 if (m_flatRules.isEmpty()) | 1404 if (m_flatRules.isEmpty()) |
1413 collectFlatRules(asCSSRuleList(pageStyleSheet()), &m_flatRules); | 1405 collectFlatRules(asCSSRuleList(pageStyleSheet()), &m_flatRules); |
1414 } | 1406 } |
1415 | 1407 |
1416 bool InspectorStyleSheet::setStyleText(CSSStyleDeclaration* style, const String&
text) | 1408 bool InspectorStyleSheet::setStyleText(CSSStyleDeclaration* style, const String&
text) |
1417 { | 1409 { |
1418 if (!m_pageStyleSheet) | |
1419 return false; | |
1420 if (!ensureParsedDataReady()) | 1410 if (!ensureParsedDataReady()) |
1421 return false; | 1411 return false; |
1422 | 1412 |
1423 String patchedStyleSheetText; | 1413 String patchedStyleSheetText; |
1424 bool success = styleSheetTextWithChangedStyle(style, text, &patchedStyleShee
tText); | 1414 bool success = styleSheetTextWithChangedStyle(style, text, &patchedStyleShee
tText); |
1425 if (!success) | 1415 if (!success) |
1426 return false; | 1416 return false; |
1427 | 1417 |
1428 InspectorCSSId id = ruleIdByStyle(style); | 1418 InspectorCSSId id = ruleIdByStyle(style); |
1429 if (id.isEmpty()) | 1419 if (id.isEmpty()) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 if (!success) | 1459 if (!success) |
1470 success = resourceStyleSheetText(result); | 1460 success = resourceStyleSheetText(result); |
1471 return success; | 1461 return success; |
1472 } | 1462 } |
1473 | 1463 |
1474 bool InspectorStyleSheet::resourceStyleSheetText(String* result) const | 1464 bool InspectorStyleSheet::resourceStyleSheetText(String* result) const |
1475 { | 1465 { |
1476 if (m_origin == TypeBuilder::CSS::StyleSheetOrigin::User || m_origin == Type
Builder::CSS::StyleSheetOrigin::User_agent) | 1466 if (m_origin == TypeBuilder::CSS::StyleSheetOrigin::User || m_origin == Type
Builder::CSS::StyleSheetOrigin::User_agent) |
1477 return false; | 1467 return false; |
1478 | 1468 |
1479 if (!m_pageStyleSheet || !ownerDocument() || !ownerDocument()->frame()) | 1469 if (!ownerDocument() || !ownerDocument()->frame()) |
1480 return false; | 1470 return false; |
1481 | 1471 |
1482 bool base64Encoded; | 1472 bool base64Encoded; |
1483 bool success = m_resourceAgent->fetchResourceContent(ownerDocument()->frame(
), KURL(ParsedURLString, m_pageStyleSheet->href()), result, &base64Encoded) && !
base64Encoded; | 1473 bool success = m_resourceAgent->fetchResourceContent(ownerDocument()->frame(
), KURL(ParsedURLString, m_pageStyleSheet->href()), result, &base64Encoded) && !
base64Encoded; |
1484 return success; | 1474 return success; |
1485 } | 1475 } |
1486 | 1476 |
1487 bool InspectorStyleSheet::inlineStyleSheetText(String* result) const | 1477 bool InspectorStyleSheet::inlineStyleSheetText(String* result) const |
1488 { | 1478 { |
1489 if (!m_pageStyleSheet) | |
1490 return false; | |
1491 | |
1492 Node* ownerNode = m_pageStyleSheet->ownerNode(); | 1479 Node* ownerNode = m_pageStyleSheet->ownerNode(); |
1493 if (!ownerNode || ownerNode->nodeType() != Node::ELEMENT_NODE) | 1480 if (!ownerNode || ownerNode->nodeType() != Node::ELEMENT_NODE) |
1494 return false; | 1481 return false; |
1495 Element& ownerElement = toElement(*ownerNode); | 1482 Element& ownerElement = toElement(*ownerNode); |
1496 | 1483 |
1497 if (!isHTMLStyleElement(ownerElement) && !isSVGStyleElement(ownerElement)) | 1484 if (!isHTMLStyleElement(ownerElement) && !isSVGStyleElement(ownerElement)) |
1498 return false; | 1485 return false; |
1499 *result = ownerElement.textContent(); | 1486 *result = ownerElement.textContent(); |
1500 return true; | 1487 return true; |
1501 } | 1488 } |
1502 | 1489 |
1503 PassRefPtr<InspectorStyleSheetForInlineStyle> InspectorStyleSheetForInlineStyle:
:create(InspectorPageAgent* pageAgent, InspectorResourceAgent* resourceAgent, co
nst String& id, PassRefPtr<Element> element, Listener* listener) | 1490 PassRefPtr<InspectorStyleSheetForInlineStyle> InspectorStyleSheetForInlineStyle:
:create(const String& id, PassRefPtr<Element> element, Listener* listener) |
1504 { | 1491 { |
1505 return adoptRef(new InspectorStyleSheetForInlineStyle(pageAgent, resourceAge
nt, id, element, listener)); | 1492 return adoptRef(new InspectorStyleSheetForInlineStyle(id, element, listener)
); |
1506 } | 1493 } |
1507 | 1494 |
1508 InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(InspectorPa
geAgent* pageAgent, InspectorResourceAgent* resourceAgent, const String& id, Pas
sRefPtr<Element> element, Listener* listener) | 1495 InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle(const Strin
g& id, PassRefPtr<Element> element, Listener* listener) |
1509 : InspectorStyleSheet(pageAgent, resourceAgent, id, nullptr, TypeBuilder::CS
S::StyleSheetOrigin::Regular, "", listener) | 1496 : InspectorStyleSheetBase(id, listener) |
1510 , m_element(element) | 1497 , m_element(element) |
1511 , m_ruleSourceData(nullptr) | 1498 , m_ruleSourceData(nullptr) |
1512 , m_isStyleTextValid(false) | 1499 , m_isStyleTextValid(false) |
1513 { | 1500 { |
1514 ASSERT(m_element); | 1501 ASSERT(m_element); |
1515 m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id, 0), inlineStyle
(), this); | 1502 m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id, 0), inlineStyle
(), this); |
1516 m_styleText = m_element->isStyledElement() ? m_element->getAttribute("style"
).string() : String(); | 1503 m_styleText = m_element->isStyledElement() ? m_element->getAttribute("style"
).string() : String(); |
1517 } | 1504 } |
1518 | 1505 |
1519 void InspectorStyleSheetForInlineStyle::didModifyElementAttribute() | 1506 void InspectorStyleSheetForInlineStyle::didModifyElementAttribute() |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1627 | 1614 |
1628 RefPtr<MutableStylePropertySet> tempDeclaration = MutableStylePropertySet::c
reate(); | 1615 RefPtr<MutableStylePropertySet> tempDeclaration = MutableStylePropertySet::c
reate(); |
1629 RuleSourceDataList ruleSourceDataResult; | 1616 RuleSourceDataList ruleSourceDataResult; |
1630 StyleSheetHandler handler(m_styleText, &m_element->document(), m_element->do
cument().elementSheet().contents(), &ruleSourceDataResult); | 1617 StyleSheetHandler handler(m_styleText, &m_element->document(), m_element->do
cument().elementSheet().contents(), &ruleSourceDataResult); |
1631 createCSSParser(&m_element->document())->parseDeclaration(tempDeclaration.ge
t(), m_styleText, &handler, m_element->document().elementSheet().contents()); | 1618 createCSSParser(&m_element->document())->parseDeclaration(tempDeclaration.ge
t(), m_styleText, &handler, m_element->document().elementSheet().contents()); |
1632 return ruleSourceDataResult.first().release(); | 1619 return ruleSourceDataResult.first().release(); |
1633 } | 1620 } |
1634 | 1621 |
1635 } // namespace WebCore | 1622 } // namespace WebCore |
1636 | 1623 |
OLD | NEW |