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

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

Issue 666883002: DevTools: [CSS] cache lineEndings in InspectorStyleSheet (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: get rid of pointer magic Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/inspector/InspectorStyleSheet.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 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 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 489
490 namespace blink { 490 namespace blink {
491 491
492 enum MediaListSource { 492 enum MediaListSource {
493 MediaListSourceLinkedSheet, 493 MediaListSourceLinkedSheet,
494 MediaListSourceInlineSheet, 494 MediaListSourceInlineSheet,
495 MediaListSourceMediaRule, 495 MediaListSourceMediaRule,
496 MediaListSourceImportRule 496 MediaListSourceImportRule
497 }; 497 };
498 498
499 static PassRefPtr<TypeBuilder::CSS::SourceRange> buildSourceRangeObject(const So urceRange& range, Vector<unsigned>* lineEndings) 499 static PassRefPtr<TypeBuilder::CSS::SourceRange> buildSourceRangeObject(const So urceRange& range, const LineEndings* lineEndings)
500 { 500 {
501 if (!lineEndings) 501 if (!lineEndings)
502 return nullptr; 502 return nullptr;
503 TextPosition start = TextPosition::fromOffsetAndLineEndings(range.start, *li neEndings); 503 TextPosition start = TextPosition::fromOffsetAndLineEndings(range.start, *li neEndings);
504 TextPosition end = TextPosition::fromOffsetAndLineEndings(range.end, *lineEn dings); 504 TextPosition end = TextPosition::fromOffsetAndLineEndings(range.end, *lineEn dings);
505 505
506 RefPtr<TypeBuilder::CSS::SourceRange> result = TypeBuilder::CSS::SourceRange ::create() 506 RefPtr<TypeBuilder::CSS::SourceRange> result = TypeBuilder::CSS::SourceRange ::create()
507 .setStartLine(start.m_line.zeroBasedInt()) 507 .setStartLine(start.m_line.zeroBasedInt())
508 .setStartColumn(start.m_column.zeroBasedInt()) 508 .setStartColumn(start.m_column.zeroBasedInt())
509 .setEndLine(end.m_line.zeroBasedInt()) 509 .setEndLine(end.m_line.zeroBasedInt())
(...skipping 30 matching lines...) Expand all
540 } 540 }
541 541
542 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con st 542 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con st
543 { 543 {
544 RefPtr<TypeBuilder::CSS::CSSStyle> result = styleWithProperties(); 544 RefPtr<TypeBuilder::CSS::CSSStyle> result = styleWithProperties();
545 if (!m_styleId.isEmpty()) 545 if (!m_styleId.isEmpty())
546 result->setStyleSheetId(m_styleId.styleSheetId()); 546 result->setStyleSheetId(m_styleId.styleSheetId());
547 547
548 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); 548 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData();
549 if (sourceData) 549 if (sourceData)
550 result->setRange(buildSourceRangeObject(sourceData->ruleBodyRange, m_par entStyleSheet->lineEndings().get())); 550 result->setRange(buildSourceRangeObject(sourceData->ruleBodyRange, m_par entStyleSheet->lineEndings()));
551 551
552 return result.release(); 552 return result.release();
553 } 553 }
554 554
555 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > Insp ectorStyle::buildArrayForComputedStyle() const 555 PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > Insp ectorStyle::buildArrayForComputedStyle() const
556 { 556 {
557 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > resu lt = TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty>::create(); 557 RefPtr<TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty> > resu lt = TypeBuilder::Array<TypeBuilder::CSS::CSSComputedStyleProperty>::create();
558 WillBeHeapVector<InspectorStyleProperty> properties; 558 WillBeHeapVector<InspectorStyleProperty> properties;
559 populateAllProperties(properties); 559 populateAllProperties(properties);
560 560
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
687 continue; 687 continue;
688 result.append(InspectorStyleProperty(CSSPropertySourceData(name, value, !m_style->getPropertyPriority(name).isEmpty(), false, true, SourceRange()), fals e)); 688 result.append(InspectorStyleProperty(CSSPropertySourceData(name, value, !m_style->getPropertyPriority(name).isEmpty(), false, true, SourceRange()), fals e));
689 } 689 }
690 } 690 }
691 691
692 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::styleWithProperties() con st 692 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::styleWithProperties() con st
693 { 693 {
694 RefPtr<Array<TypeBuilder::CSS::CSSProperty> > propertiesObject = Array<TypeB uilder::CSS::CSSProperty>::create(); 694 RefPtr<Array<TypeBuilder::CSS::CSSProperty> > propertiesObject = Array<TypeB uilder::CSS::CSSProperty>::create();
695 RefPtr<Array<TypeBuilder::CSS::ShorthandEntry> > shorthandEntries = Array<Ty peBuilder::CSS::ShorthandEntry>::create(); 695 RefPtr<Array<TypeBuilder::CSS::ShorthandEntry> > shorthandEntries = Array<Ty peBuilder::CSS::ShorthandEntry>::create();
696 HashSet<String> foundShorthands; 696 HashSet<String> foundShorthands;
697 OwnPtr<Vector<unsigned> > lineEndings(m_parentStyleSheet ? m_parentStyleShee t->lineEndings() : PassOwnPtr<Vector<unsigned> >());
698 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); 697 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData();
699 698
700 WillBeHeapVector<InspectorStyleProperty> properties; 699 WillBeHeapVector<InspectorStyleProperty> properties;
701 populateAllProperties(properties); 700 populateAllProperties(properties);
702 701
703 for (WillBeHeapVector<InspectorStyleProperty>::iterator it = properties.begi n(), itEnd = properties.end(); it != itEnd; ++it) { 702 for (WillBeHeapVector<InspectorStyleProperty>::iterator it = properties.begi n(), itEnd = properties.end(); it != itEnd; ++it) {
704 const CSSPropertySourceData& propertyEntry = it->sourceData; 703 const CSSPropertySourceData& propertyEntry = it->sourceData;
705 const String& name = propertyEntry.name; 704 const String& name = propertyEntry.name;
706 705
707 RefPtr<TypeBuilder::CSS::CSSProperty> property = TypeBuilder::CSS::CSSPr operty::create() 706 RefPtr<TypeBuilder::CSS::CSSProperty> property = TypeBuilder::CSS::CSSPr operty::create()
708 .setName(name) 707 .setName(name)
709 .setValue(propertyEntry.value); 708 .setValue(propertyEntry.value);
710 propertiesObject->addItem(property); 709 propertiesObject->addItem(property);
711 710
712 // Default "parsedOk" == true. 711 // Default "parsedOk" == true.
713 if (!propertyEntry.parsedOk) 712 if (!propertyEntry.parsedOk)
714 property->setParsedOk(false); 713 property->setParsedOk(false);
715 if (it->hasRawText()) 714 if (it->hasRawText())
716 property->setText(it->rawText); 715 property->setText(it->rawText);
717 716
718 if (propertyEntry.important) 717 if (propertyEntry.important)
719 property->setImportant(true); 718 property->setImportant(true);
720 if (it->hasSource) { 719 if (it->hasSource) {
721 property->setRange(buildSourceRangeObject(propertyEntry.range, lineE ndings.get())); 720 property->setRange(buildSourceRangeObject(propertyEntry.range, m_par entStyleSheet ? m_parentStyleSheet->lineEndings() : nullptr));
722 if (!propertyEntry.disabled) { 721 if (!propertyEntry.disabled) {
723 ASSERT_UNUSED(sourceData, sourceData); 722 ASSERT_UNUSED(sourceData, sourceData);
724 property->setImplicit(false); 723 property->setImplicit(false);
725 } 724 }
726 property->setDisabled(propertyEntry.disabled); 725 property->setDisabled(propertyEntry.disabled);
727 } else if (!propertyEntry.disabled) { 726 } else if (!propertyEntry.disabled) {
728 bool implicit = m_style->isPropertyImplicit(name); 727 bool implicit = m_style->isPropertyImplicit(name);
729 // Default "implicit" == false. 728 // Default "implicit" == false.
730 if (implicit) 729 if (implicit)
731 property->setImplicit(true); 730 property->setImplicit(true);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 851
853 void InspectorStyle::trace(Visitor* visitor) 852 void InspectorStyle::trace(Visitor* visitor)
854 { 853 {
855 visitor->trace(m_style); 854 visitor->trace(m_style);
856 visitor->trace(m_parentStyleSheet); 855 visitor->trace(m_parentStyleSheet);
857 } 856 }
858 857
859 InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* lis tener) 858 InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* lis tener)
860 : m_id(id) 859 : m_id(id)
861 , m_listener(listener) 860 , m_listener(listener)
861 , m_lineEndings(adoptPtr(new LineEndings()))
862 { 862 {
863 } 863 }
864 864
865 bool InspectorStyleSheetBase::setPropertyText(const InspectorCSSId& id, unsigned propertyIndex, const String& text, bool overwrite, ExceptionState& exceptionSta te) 865 bool InspectorStyleSheetBase::setPropertyText(const InspectorCSSId& id, unsigned propertyIndex, const String& text, bool overwrite, ExceptionState& exceptionSta te)
866 { 866 {
867 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); 867 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id);
868 if (!inspectorStyle) { 868 if (!inspectorStyle) {
869 exceptionState.throwDOMException(NotFoundError, "No property could be fo und for the given ID."); 869 exceptionState.throwDOMException(NotFoundError, "No property could be fo und for the given ID.");
870 return false; 870 return false;
871 } 871 }
872 return inspectorStyle->setPropertyText(propertyIndex, text, overwrite, excep tionState); 872 return inspectorStyle->setPropertyText(propertyIndex, text, overwrite, excep tionState);
873 } 873 }
874 874
875 bool InspectorStyleSheetBase::getStyleText(const InspectorCSSId& id, String* tex t) 875 bool InspectorStyleSheetBase::getStyleText(const InspectorCSSId& id, String* tex t)
876 { 876 {
877 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id); 877 RefPtrWillBeRawPtr<InspectorStyle> inspectorStyle = inspectorStyleForId(id);
878 if (!inspectorStyle) 878 if (!inspectorStyle)
879 return false; 879 return false;
880 return inspectorStyle->styleText(text); 880 return inspectorStyle->styleText(text);
881 } 881 }
882 882
883 void InspectorStyleSheetBase::fireStyleSheetChanged() 883 void InspectorStyleSheetBase::onStyleSheetTextChanged()
884 { 884 {
885 m_lineEndings = adoptPtrWillBeNoop(new LineEndings());
885 if (listener()) 886 if (listener())
886 listener()->styleSheetChanged(this); 887 listener()->styleSheetChanged(this);
887 } 888 }
888 889
889 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForSt yle(CSSStyleDeclaration* style) 890 PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForSt yle(CSSStyleDeclaration* style)
890 { 891 {
891 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr; 892 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr;
892 if (ensureParsedDataReady()) 893 if (ensureParsedDataReady())
893 sourceData = ruleSourceDataAt(styleId(style).ordinal()); 894 sourceData = ruleSourceDataAt(styleId(style).ordinal());
894 895
(...skipping 13 matching lines...) Expand all
908 bool success = getText(&sheetText); 909 bool success = getText(&sheetText);
909 if (success) { 910 if (success) {
910 const SourceRange& bodyRange = sourceData->ruleBodyRange; 911 const SourceRange& bodyRange = sourceData->ruleBodyRange;
911 result->setCssText(sheetText.substring(bodyRange.start, bodyRange.en d - bodyRange.start)); 912 result->setCssText(sheetText.substring(bodyRange.start, bodyRange.en d - bodyRange.start));
912 } 913 }
913 } 914 }
914 915
915 return result.release(); 916 return result.release();
916 } 917 }
917 918
918 PassOwnPtr<Vector<unsigned> > InspectorStyleSheetBase::lineEndings() 919 const LineEndings* InspectorStyleSheetBase::lineEndings()
919 { 920 {
921 if (m_lineEndings->size() > 0)
922 return m_lineEndings.get();
920 String text; 923 String text;
921 if (!getText(&text)) 924 if (getText(&text))
922 return PassOwnPtr<Vector<unsigned> >(); 925 m_lineEndings = WTF::lineEndings(text);
923 return WTF::lineEndings(text); 926 return m_lineEndings.get();
924 } 927 }
925 928
926 bool InspectorStyleSheetBase::lineNumberAndColumnToOffset(unsigned lineNumber, u nsigned columnNumber, unsigned* offset) 929 bool InspectorStyleSheetBase::lineNumberAndColumnToOffset(unsigned lineNumber, u nsigned columnNumber, unsigned* offset)
927 { 930 {
928 OwnPtr<Vector<unsigned> > endings = lineEndings(); 931 const LineEndings* endings = lineEndings();
929 if (lineNumber >= endings->size()) 932 if (lineNumber >= endings->size())
930 return false; 933 return false;
931 unsigned charactersInLine = lineNumber > 0 ? endings->at(lineNumber) - endin gs->at(lineNumber - 1) - 1 : endings->at(0); 934 unsigned charactersInLine = lineNumber > 0 ? endings->at(lineNumber) - endin gs->at(lineNumber - 1) - 1 : endings->at(0);
932 if (columnNumber > charactersInLine) 935 if (columnNumber > charactersInLine)
933 return false; 936 return false;
934 TextPosition position(OrdinalNumber::fromZeroBasedInt(lineNumber), OrdinalNu mber::fromZeroBasedInt(columnNumber)); 937 TextPosition position(OrdinalNumber::fromZeroBasedInt(lineNumber), OrdinalNu mber::fromZeroBasedInt(columnNumber));
935 *offset = position.toOffset(*endings).zeroBasedInt(); 938 *offset = position.toOffset(*endings).zeroBasedInt();
936 return true; 939 return true;
937 } 940 }
938 941
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 m_pageStyleSheet->contents()->clearRules(); 1033 m_pageStyleSheet->contents()->clearRules();
1031 m_pageStyleSheet->clearChildRuleCSSOMWrappers(); 1034 m_pageStyleSheet->clearChildRuleCSSOMWrappers();
1032 } 1035 }
1033 { 1036 {
1034 CSSStyleSheet::RuleMutationScope mutationScope(m_pageStyleSheet.get()); 1037 CSSStyleSheet::RuleMutationScope mutationScope(m_pageStyleSheet.get());
1035 m_pageStyleSheet->contents()->parseString(text); 1038 m_pageStyleSheet->contents()->parseString(text);
1036 } 1039 }
1037 1040
1038 if (listener()) 1041 if (listener())
1039 listener()->didReparseStyleSheet(); 1042 listener()->didReparseStyleSheet();
1040 fireStyleSheetChanged(); 1043 onStyleSheetTextChanged();
1041 m_pageStyleSheet->ownerDocument()->styleResolverChanged(FullStyleUpdate); 1044 m_pageStyleSheet->ownerDocument()->styleResolverChanged(FullStyleUpdate);
1042 return true; 1045 return true;
1043 } 1046 }
1044 1047
1045 String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat e& exceptionState) 1048 String InspectorStyleSheet::ruleSelector(const InspectorCSSId& id, ExceptionStat e& exceptionState)
1046 { 1049 {
1047 CSSStyleRule* rule = ruleForId(id); 1050 CSSStyleRule* rule = ruleForId(id);
1048 if (!rule) { 1051 if (!rule) {
1049 exceptionState.throwDOMException(NotFoundError, "No rule was found for t he given ID."); 1052 exceptionState.throwDOMException(NotFoundError, "No rule was found for t he given ID.");
1050 return ""; 1053 return "";
(...skipping 17 matching lines...) Expand all
1068 rule->setSelectorText(selector); 1071 rule->setSelectorText(selector);
1069 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(id.ordin al()); 1072 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = ruleSourceDataAt(id.ordin al());
1070 if (!sourceData) { 1073 if (!sourceData) {
1071 exceptionState.throwDOMException(NotFoundError, "The selector '" + selec tor + "' could not be set."); 1074 exceptionState.throwDOMException(NotFoundError, "The selector '" + selec tor + "' could not be set.");
1072 return false; 1075 return false;
1073 } 1076 }
1074 1077
1075 String sheetText = m_parsedStyleSheet->text(); 1078 String sheetText = m_parsedStyleSheet->text();
1076 sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderR ange.length(), selector); 1079 sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderR ange.length(), selector);
1077 updateText(sheetText); 1080 updateText(sheetText);
1078 fireStyleSheetChanged(); 1081 onStyleSheetTextChanged();
1079 return true; 1082 return true;
1080 } 1083 }
1081 1084
1082 unsigned InspectorStyleSheet::ruleIndexBySourceRange(const CSSMediaRule* parentM ediaRule, const SourceRange& sourceRange) 1085 unsigned InspectorStyleSheet::ruleIndexBySourceRange(const CSSMediaRule* parentM ediaRule, const SourceRange& sourceRange)
1083 { 1086 {
1084 unsigned index = 0; 1087 unsigned index = 0;
1085 for (size_t i = 0; i < m_flatRules.size(); ++i) { 1088 for (size_t i = 0; i < m_flatRules.size(); ++i) {
1086 RefPtrWillBeRawPtr<CSSRule> rule = m_flatRules.at(i); 1089 RefPtrWillBeRawPtr<CSSRule> rule = m_flatRules.at(i);
1087 if (rule->parentRule() != parentMediaRule) 1090 if (rule->parentRule() != parentMediaRule)
1088 continue; 1091 continue;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 return 0; 1207 return 0;
1205 } 1208 }
1206 1209
1207 ensureFlatRules(); 1210 ensureFlatRules();
1208 CSSStyleRule* styleRule = insertCSSOMRuleBySourceRange(location, ruleText, e xceptionState); 1211 CSSStyleRule* styleRule = insertCSSOMRuleBySourceRange(location, ruleText, e xceptionState);
1209 if (exceptionState.hadException()) 1212 if (exceptionState.hadException())
1210 return 0; 1213 return 0;
1211 1214
1212 text.insert(ruleText, location.start); 1215 text.insert(ruleText, location.start);
1213 1216
1214 m_parsedStyleSheet->setText(text); 1217 updateText(text);
1215 m_flatRules.clear(); 1218 m_flatRules.clear();
1216 1219
1217 fireStyleSheetChanged(); 1220 onStyleSheetTextChanged();
1218 return styleRule; 1221 return styleRule;
1219 } 1222 }
1220 1223
1221 bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, const String& old Text, ExceptionState& exceptionState) 1224 bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, const String& old Text, ExceptionState& exceptionState)
1222 { 1225 {
1223 RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id); 1226 RefPtrWillBeRawPtr<CSSStyleRule> rule = ruleForId(id);
1224 if (!rule) { 1227 if (!rule) {
1225 exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID."); 1228 exceptionState.throwDOMException(NotFoundError, "No style rule could be found for the provided ID.");
1226 return false; 1229 return false;
1227 } 1230 }
(...skipping 26 matching lines...) Expand all
1254 while (index < styleSheet->length() && styleSheet->item(index) != rule) 1257 while (index < styleSheet->length() && styleSheet->item(index) != rule)
1255 ++index; 1258 ++index;
1256 ASSERT(index < styleSheet->length()); 1259 ASSERT(index < styleSheet->length());
1257 styleSheet->deleteRule(index, exceptionState); 1260 styleSheet->deleteRule(index, exceptionState);
1258 } 1261 }
1259 // |rule| MAY NOT be addressed after this line! 1262 // |rule| MAY NOT be addressed after this line!
1260 1263
1261 if (exceptionState.hadException()) 1264 if (exceptionState.hadException())
1262 return false; 1265 return false;
1263 1266
1264 m_parsedStyleSheet->setText(oldText); 1267 updateText(oldText);
1265 m_flatRules.clear(); 1268 m_flatRules.clear();
1266 fireStyleSheetChanged(); 1269 onStyleSheetTextChanged();
1267 return true; 1270 return true;
1268 } 1271 }
1269 1272
1270 void InspectorStyleSheet::updateText(const String& newText) 1273 void InspectorStyleSheet::updateText(const String& newText)
1271 { 1274 {
1272 Element* element = ownerStyleElement(); 1275 Element* element = ownerStyleElement();
1273 if (!element) 1276 if (!element)
1274 m_pageAgent->addEditedResourceContent(finalURL(), newText); 1277 m_pageAgent->addEditedResourceContent(finalURL(), newText);
1275 m_parsedStyleSheet->setText(newText); 1278 m_parsedStyleSheet->setText(newText);
1276 } 1279 }
1277 1280
1278
1279 CSSStyleRule* InspectorStyleSheet::ruleForId(const InspectorCSSId& id) const 1281 CSSStyleRule* InspectorStyleSheet::ruleForId(const InspectorCSSId& id) const
1280 { 1282 {
1281 ASSERT(!id.isEmpty()); 1283 ASSERT(!id.isEmpty());
1282 ensureFlatRules(); 1284 ensureFlatRules();
1283 return InspectorCSSAgent::asCSSStyleRule(id.ordinal() >= m_flatRules.size() ? 0 : m_flatRules.at(id.ordinal()).get()); 1285 return InspectorCSSAgent::asCSSStyleRule(id.ordinal() >= m_flatRules.size() ? 0 : m_flatRules.at(id.ordinal()).get());
1284 } 1286 }
1285 1287
1286 PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> InspectorStyleSheet::buildObje ctForStyleSheetInfo() const 1288 PassRefPtr<TypeBuilder::CSS::CSSStyleSheetHeader> InspectorStyleSheet::buildObje ctForStyleSheetInfo() const
1287 { 1289 {
1288 CSSStyleSheet* styleSheet = pageStyleSheet(); 1290 CSSStyleSheet* styleSheet = pageStyleSheet();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 String selector = sheetText.substring(range.start, range.length()); 1324 String selector = sheetText.substring(range.start, range.length());
1323 1325
1324 // We don't want to see any comments in the selector components, only th e meaningful parts. 1326 // We don't want to see any comments in the selector components, only th e meaningful parts.
1325 int matchLength; 1327 int matchLength;
1326 int offset = 0; 1328 int offset = 0;
1327 while ((offset = comment.match(selector, offset, &matchLength)) >= 0) 1329 while ((offset = comment.match(selector, offset, &matchLength)) >= 0)
1328 selector.replace(offset, matchLength, ""); 1330 selector.replace(offset, matchLength, "");
1329 1331
1330 RefPtr<TypeBuilder::CSS::Selector> simpleSelector = TypeBuilder::CSS::Se lector::create() 1332 RefPtr<TypeBuilder::CSS::Selector> simpleSelector = TypeBuilder::CSS::Se lector::create()
1331 .setValue(selector.stripWhiteSpace()); 1333 .setValue(selector.stripWhiteSpace());
1332 simpleSelector->setRange(buildSourceRangeObject(range, lineEndings().get ())); 1334 simpleSelector->setRange(buildSourceRangeObject(range, lineEndings()));
1333 result->addItem(simpleSelector.release()); 1335 result->addItem(simpleSelector.release());
1334 } 1336 }
1335 return result.release(); 1337 return result.release();
1336 } 1338 }
1337 1339
1338 PassRefPtr<TypeBuilder::CSS::SelectorList> InspectorStyleSheet::buildObjectForSe lectorList(CSSStyleRule* rule) 1340 PassRefPtr<TypeBuilder::CSS::SelectorList> InspectorStyleSheet::buildObjectForSe lectorList(CSSStyleRule* rule)
1339 { 1341 {
1340 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr; 1342 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = nullptr;
1341 if (ensureParsedDataReady()) 1343 if (ensureParsedDataReady())
1342 sourceData = ruleSourceDataAt(styleId(rule->style()).ordinal()); 1344 sourceData = ruleSourceDataAt(styleId(rule->style()).ordinal());
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 return nullptr; 1413 return nullptr;
1412 1414
1413 ensureFlatRules(); 1415 ensureFlatRules();
1414 size_t index = m_flatRules.find(rule); 1416 size_t index = m_flatRules.find(rule);
1415 // FIXME(lusnikov): m_flatRules are not always aligned with the m_parsedStyl eSheet rule source 1417 // FIXME(lusnikov): m_flatRules are not always aligned with the m_parsedStyl eSheet rule source
1416 // datas due to the CSSOM operations that add/remove rules without changing source. 1418 // datas due to the CSSOM operations that add/remove rules without changing source.
1417 // This is a design issue. See crbug.com/178410 1419 // This is a design issue. See crbug.com/178410
1418 if (index == kNotFound || index >= m_parsedStyleSheet->ruleCount()) 1420 if (index == kNotFound || index >= m_parsedStyleSheet->ruleCount())
1419 return nullptr; 1421 return nullptr;
1420 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleS ourceDataAt(static_cast<unsigned>(index)); 1422 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleS ourceDataAt(static_cast<unsigned>(index));
1421 return buildSourceRangeObject(sourceData->ruleHeaderRange, lineEndings().get ()); 1423 return buildSourceRangeObject(sourceData->ruleHeaderRange, lineEndings());
1422 } 1424 }
1423 1425
1424 PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::mediaQueryExpValu eSourceRange(const CSSRule* rule, size_t mediaQueryIndex, size_t mediaQueryExpIn dex) 1426 PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::mediaQueryExpValu eSourceRange(const CSSRule* rule, size_t mediaQueryIndex, size_t mediaQueryExpIn dex)
1425 { 1427 {
1426 if (!ensureParsedDataReady()) 1428 if (!ensureParsedDataReady())
1427 return nullptr; 1429 return nullptr;
1428 ensureFlatRules(); 1430 ensureFlatRules();
1429 size_t index = m_flatRules.find(rule); 1431 size_t index = m_flatRules.find(rule);
1430 if (index == kNotFound || index >= m_parsedStyleSheet->ruleCount()) 1432 if (index == kNotFound || index >= m_parsedStyleSheet->ruleCount())
1431 return nullptr; 1433 return nullptr;
1432 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleS ourceDataAt(static_cast<unsigned>(index)); 1434 RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleS ourceDataAt(static_cast<unsigned>(index));
1433 if (!sourceData->mediaSourceData || mediaQueryIndex >= sourceData->mediaSour ceData->queryData.size()) 1435 if (!sourceData->mediaSourceData || mediaQueryIndex >= sourceData->mediaSour ceData->queryData.size())
1434 return nullptr; 1436 return nullptr;
1435 RefPtrWillBeRawPtr<CSSMediaQuerySourceData> mediaQueryData = sourceData->med iaSourceData->queryData.at(mediaQueryIndex); 1437 RefPtrWillBeRawPtr<CSSMediaQuerySourceData> mediaQueryData = sourceData->med iaSourceData->queryData.at(mediaQueryIndex);
1436 if (mediaQueryExpIndex >= mediaQueryData->expData.size()) 1438 if (mediaQueryExpIndex >= mediaQueryData->expData.size())
1437 return nullptr; 1439 return nullptr;
1438 return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex) .valueRange, lineEndings().get()); 1440 return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex) .valueRange, lineEndings());
1439 } 1441 }
1440 1442
1441 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheet::inspectorStyleForId( const InspectorCSSId& id) 1443 PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheet::inspectorStyleForId( const InspectorCSSId& id)
1442 { 1444 {
1443 CSSStyleDeclaration* style = styleForId(id); 1445 CSSStyleDeclaration* style = styleForId(id);
1444 if (!style) 1446 if (!style)
1445 return nullptr; 1447 return nullptr;
1446 1448
1447 return InspectorStyle::create(id, style, this); 1449 return InspectorStyle::create(id, style, this);
1448 } 1450 }
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 1648
1647 String patchedStyleSheetText; 1649 String patchedStyleSheetText;
1648 bool success = styleSheetTextWithChangedStyle(style, text, &patchedStyleShee tText); 1650 bool success = styleSheetTextWithChangedStyle(style, text, &patchedStyleShee tText);
1649 if (!success) 1651 if (!success)
1650 return false; 1652 return false;
1651 1653
1652 TrackExceptionState exceptionState; 1654 TrackExceptionState exceptionState;
1653 style->setCSSText(text, exceptionState); 1655 style->setCSSText(text, exceptionState);
1654 if (!exceptionState.hadException()) { 1656 if (!exceptionState.hadException()) {
1655 updateText(patchedStyleSheetText); 1657 updateText(patchedStyleSheetText);
1656 fireStyleSheetChanged(); 1658 onStyleSheetTextChanged();
1657 } 1659 }
1658 1660
1659 return !exceptionState.hadException(); 1661 return !exceptionState.hadException();
1660 } 1662 }
1661 1663
1662 bool InspectorStyleSheet::styleSheetTextWithChangedStyle(CSSStyleDeclaration* st yle, const String& newStyleText, String* result) 1664 bool InspectorStyleSheet::styleSheetTextWithChangedStyle(CSSStyleDeclaration* st yle, const String& newStyleText, String* result)
1663 { 1665 {
1664 if (!style) 1666 if (!style)
1665 return false; 1667 return false;
1666 if (!ensureParsedDataReady()) 1668 if (!ensureParsedDataReady())
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1752 if (m_element->isStyledElement() && m_element->style() != m_inspectorStyle-> cssStyle()) 1754 if (m_element->isStyledElement() && m_element->style() != m_inspectorStyle-> cssStyle())
1753 m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id(), 0), inlin eStyle(), this); 1755 m_inspectorStyle = InspectorStyle::create(InspectorCSSId(id(), 0), inlin eStyle(), this);
1754 m_ruleSourceData.clear(); 1756 m_ruleSourceData.clear();
1755 } 1757 }
1756 1758
1757 bool InspectorStyleSheetForInlineStyle::setText(const String& text, ExceptionSta te& exceptionState) 1759 bool InspectorStyleSheetForInlineStyle::setText(const String& text, ExceptionSta te& exceptionState)
1758 { 1760 {
1759 bool success = setStyleText(InspectorCSSId(id(), 0), text); 1761 bool success = setStyleText(InspectorCSSId(id(), 0), text);
1760 if (!success) 1762 if (!success)
1761 exceptionState.throwDOMException(SyntaxError, "Style sheet text is inval id."); 1763 exceptionState.throwDOMException(SyntaxError, "Style sheet text is inval id.");
1762 else
1763 fireStyleSheetChanged();
1764 return success; 1764 return success;
1765 } 1765 }
1766 1766
1767 bool InspectorStyleSheetForInlineStyle::getText(String* result) const 1767 bool InspectorStyleSheetForInlineStyle::getText(String* result) const
1768 { 1768 {
1769 if (!m_isStyleTextValid) { 1769 if (!m_isStyleTextValid) {
1770 m_styleText = elementStyleText(); 1770 m_styleText = elementStyleText();
1771 m_isStyleTextValid = true; 1771 m_isStyleTextValid = true;
1772 } 1772 }
1773 *result = m_styleText; 1773 *result = m_styleText;
1774 return true; 1774 return true;
1775 } 1775 }
1776 1776
1777 bool InspectorStyleSheetForInlineStyle::setStyleText(const InspectorCSSId& id, c onst String& text) 1777 bool InspectorStyleSheetForInlineStyle::setStyleText(const InspectorCSSId& id, c onst String& text)
1778 { 1778 {
1779 CSSStyleDeclaration* style = styleForId(id); 1779 CSSStyleDeclaration* style = styleForId(id);
1780 if (!style) 1780 if (!style)
1781 return false; 1781 return false;
1782 ASSERT_UNUSED(style, style == inlineStyle()); 1782 ASSERT_UNUSED(style, style == inlineStyle());
1783 TrackExceptionState exceptionState; 1783 TrackExceptionState exceptionState;
1784 1784
1785 { 1785 {
1786 InspectorCSSAgent::InlineStyleOverrideScope overrideScope(m_element->own erDocument()); 1786 InspectorCSSAgent::InlineStyleOverrideScope overrideScope(m_element->own erDocument());
1787 m_element->setAttribute("style", AtomicString(text), exceptionState); 1787 m_element->setAttribute("style", AtomicString(text), exceptionState);
1788 } 1788 }
1789 if (!exceptionState.hadException()) { 1789 if (!exceptionState.hadException()) {
1790 m_styleText = text; 1790 m_styleText = text;
1791 m_isStyleTextValid = true; 1791 m_isStyleTextValid = true;
1792 m_ruleSourceData.clear(); 1792 m_ruleSourceData.clear();
1793 fireStyleSheetChanged(); 1793 onStyleSheetTextChanged();
1794 } 1794 }
1795 return !exceptionState.hadException(); 1795 return !exceptionState.hadException();
1796 } 1796 }
1797 1797
1798 Document* InspectorStyleSheetForInlineStyle::ownerDocument() const 1798 Document* InspectorStyleSheetForInlineStyle::ownerDocument() const
1799 { 1799 {
1800 return &m_element->document(); 1800 return &m_element->document();
1801 } 1801 }
1802 1802
1803 bool InspectorStyleSheetForInlineStyle::ensureParsedDataReady() 1803 bool InspectorStyleSheetForInlineStyle::ensureParsedDataReady()
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1862 void InspectorStyleSheetForInlineStyle::trace(Visitor* visitor) 1862 void InspectorStyleSheetForInlineStyle::trace(Visitor* visitor)
1863 { 1863 {
1864 visitor->trace(m_element); 1864 visitor->trace(m_element);
1865 visitor->trace(m_ruleSourceData); 1865 visitor->trace(m_ruleSourceData);
1866 visitor->trace(m_inspectorStyle); 1866 visitor->trace(m_inspectorStyle);
1867 InspectorStyleSheetBase::trace(visitor); 1867 InspectorStyleSheetBase::trace(visitor);
1868 } 1868 }
1869 1869
1870 } // namespace blink 1870 } // namespace blink
1871 1871
OLDNEW
« no previous file with comments | « Source/core/inspector/InspectorStyleSheet.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698