Index: Source/core/inspector/InspectorStyleSheet.cpp |
diff --git a/Source/core/inspector/InspectorStyleSheet.cpp b/Source/core/inspector/InspectorStyleSheet.cpp |
index 7eb7fd1122483297a8b26718ffd48893b2392218..cf27161442fe11466fed6b8785324450116d0c4f 100644 |
--- a/Source/core/inspector/InspectorStyleSheet.cpp |
+++ b/Source/core/inspector/InspectorStyleSheet.cpp |
@@ -496,7 +496,7 @@ enum MediaListSource { |
MediaListSourceImportRule |
}; |
-static PassRefPtr<TypeBuilder::CSS::SourceRange> buildSourceRangeObject(const SourceRange& range, Vector<unsigned>* lineEndings) |
+static PassRefPtr<TypeBuilder::CSS::SourceRange> buildSourceRangeObject(const SourceRange& range, const LineEndings* lineEndings) |
{ |
if (!lineEndings) |
return nullptr; |
@@ -547,7 +547,7 @@ PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::buildObjectForStyle() con |
RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); |
if (sourceData) |
- result->setRange(buildSourceRangeObject(sourceData->ruleBodyRange, m_parentStyleSheet->lineEndings().get())); |
+ result->setRange(buildSourceRangeObject(sourceData->ruleBodyRange, m_parentStyleSheet->lineEndings())); |
return result.release(); |
} |
@@ -694,7 +694,6 @@ PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::styleWithProperties() con |
RefPtr<Array<TypeBuilder::CSS::CSSProperty> > propertiesObject = Array<TypeBuilder::CSS::CSSProperty>::create(); |
RefPtr<Array<TypeBuilder::CSS::ShorthandEntry> > shorthandEntries = Array<TypeBuilder::CSS::ShorthandEntry>::create(); |
HashSet<String> foundShorthands; |
- OwnPtr<Vector<unsigned> > lineEndings(m_parentStyleSheet ? m_parentStyleSheet->lineEndings() : PassOwnPtr<Vector<unsigned> >()); |
RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = extractSourceData(); |
WillBeHeapVector<InspectorStyleProperty> properties; |
@@ -718,7 +717,7 @@ PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyle::styleWithProperties() con |
if (propertyEntry.important) |
property->setImportant(true); |
if (it->hasSource) { |
- property->setRange(buildSourceRangeObject(propertyEntry.range, lineEndings.get())); |
+ property->setRange(buildSourceRangeObject(propertyEntry.range, m_parentStyleSheet ? m_parentStyleSheet->lineEndings() : nullptr)); |
if (!propertyEntry.disabled) { |
ASSERT_UNUSED(sourceData, sourceData); |
property->setImplicit(false); |
@@ -859,6 +858,7 @@ void InspectorStyle::trace(Visitor* visitor) |
InspectorStyleSheetBase::InspectorStyleSheetBase(const String& id, Listener* listener) |
: m_id(id) |
, m_listener(listener) |
+ , m_lineEndings(adoptPtr(new LineEndings())) |
{ |
} |
@@ -880,8 +880,9 @@ bool InspectorStyleSheetBase::getStyleText(const InspectorCSSId& id, String* tex |
return inspectorStyle->styleText(text); |
} |
-void InspectorStyleSheetBase::fireStyleSheetChanged() |
+void InspectorStyleSheetBase::onStyleSheetTextChanged() |
{ |
+ m_lineEndings = adoptPtrWillBeNoop(new LineEndings()); |
if (listener()) |
listener()->styleSheetChanged(this); |
} |
@@ -915,17 +916,19 @@ PassRefPtr<TypeBuilder::CSS::CSSStyle> InspectorStyleSheetBase::buildObjectForSt |
return result.release(); |
} |
-PassOwnPtr<Vector<unsigned> > InspectorStyleSheetBase::lineEndings() |
+const LineEndings* InspectorStyleSheetBase::lineEndings() |
{ |
+ if (m_lineEndings->size() > 0) |
+ return m_lineEndings.get(); |
String text; |
- if (!getText(&text)) |
- return PassOwnPtr<Vector<unsigned> >(); |
- return WTF::lineEndings(text); |
+ if (getText(&text)) |
+ m_lineEndings = WTF::lineEndings(text); |
+ return m_lineEndings.get(); |
} |
bool InspectorStyleSheetBase::lineNumberAndColumnToOffset(unsigned lineNumber, unsigned columnNumber, unsigned* offset) |
{ |
- OwnPtr<Vector<unsigned> > endings = lineEndings(); |
+ const LineEndings* endings = lineEndings(); |
if (lineNumber >= endings->size()) |
return false; |
unsigned charactersInLine = lineNumber > 0 ? endings->at(lineNumber) - endings->at(lineNumber - 1) - 1 : endings->at(0); |
@@ -1037,7 +1040,7 @@ bool InspectorStyleSheet::setText(const String& text, ExceptionState& exceptionS |
if (listener()) |
listener()->didReparseStyleSheet(); |
- fireStyleSheetChanged(); |
+ onStyleSheetTextChanged(); |
m_pageStyleSheet->ownerDocument()->styleResolverChanged(FullStyleUpdate); |
return true; |
} |
@@ -1075,7 +1078,7 @@ bool InspectorStyleSheet::setRuleSelector(const InspectorCSSId& id, const String |
String sheetText = m_parsedStyleSheet->text(); |
sheetText.replace(sourceData->ruleHeaderRange.start, sourceData->ruleHeaderRange.length(), selector); |
updateText(sheetText); |
- fireStyleSheetChanged(); |
+ onStyleSheetTextChanged(); |
return true; |
} |
@@ -1211,10 +1214,10 @@ CSSStyleRule* InspectorStyleSheet::addRule(const String& ruleText, const SourceR |
text.insert(ruleText, location.start); |
- m_parsedStyleSheet->setText(text); |
+ updateText(text); |
m_flatRules.clear(); |
- fireStyleSheetChanged(); |
+ onStyleSheetTextChanged(); |
return styleRule; |
} |
@@ -1261,9 +1264,9 @@ bool InspectorStyleSheet::deleteRule(const InspectorCSSId& id, const String& old |
if (exceptionState.hadException()) |
return false; |
- m_parsedStyleSheet->setText(oldText); |
+ updateText(oldText); |
m_flatRules.clear(); |
- fireStyleSheetChanged(); |
+ onStyleSheetTextChanged(); |
return true; |
} |
@@ -1275,7 +1278,6 @@ void InspectorStyleSheet::updateText(const String& newText) |
m_parsedStyleSheet->setText(newText); |
} |
- |
CSSStyleRule* InspectorStyleSheet::ruleForId(const InspectorCSSId& id) const |
{ |
ASSERT(!id.isEmpty()); |
@@ -1329,7 +1331,7 @@ PassRefPtr<TypeBuilder::Array<TypeBuilder::CSS::Selector> > InspectorStyleSheet: |
RefPtr<TypeBuilder::CSS::Selector> simpleSelector = TypeBuilder::CSS::Selector::create() |
.setValue(selector.stripWhiteSpace()); |
- simpleSelector->setRange(buildSourceRangeObject(range, lineEndings().get())); |
+ simpleSelector->setRange(buildSourceRangeObject(range, lineEndings())); |
result->addItem(simpleSelector.release()); |
} |
return result.release(); |
@@ -1418,7 +1420,7 @@ PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::ruleHeaderSourceR |
if (index == kNotFound || index >= m_parsedStyleSheet->ruleCount()) |
return nullptr; |
RefPtrWillBeRawPtr<CSSRuleSourceData> sourceData = m_parsedStyleSheet->ruleSourceDataAt(static_cast<unsigned>(index)); |
- return buildSourceRangeObject(sourceData->ruleHeaderRange, lineEndings().get()); |
+ return buildSourceRangeObject(sourceData->ruleHeaderRange, lineEndings()); |
} |
PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::mediaQueryExpValueSourceRange(const CSSRule* rule, size_t mediaQueryIndex, size_t mediaQueryExpIndex) |
@@ -1435,7 +1437,7 @@ PassRefPtr<TypeBuilder::CSS::SourceRange> InspectorStyleSheet::mediaQueryExpValu |
RefPtrWillBeRawPtr<CSSMediaQuerySourceData> mediaQueryData = sourceData->mediaSourceData->queryData.at(mediaQueryIndex); |
if (mediaQueryExpIndex >= mediaQueryData->expData.size()) |
return nullptr; |
- return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex).valueRange, lineEndings().get()); |
+ return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex).valueRange, lineEndings()); |
} |
PassRefPtrWillBeRawPtr<InspectorStyle> InspectorStyleSheet::inspectorStyleForId(const InspectorCSSId& id) |
@@ -1653,7 +1655,7 @@ bool InspectorStyleSheet::setStyleText(const InspectorCSSId& id, const String& t |
style->setCSSText(text, exceptionState); |
if (!exceptionState.hadException()) { |
updateText(patchedStyleSheetText); |
- fireStyleSheetChanged(); |
+ onStyleSheetTextChanged(); |
} |
return !exceptionState.hadException(); |
@@ -1759,8 +1761,6 @@ bool InspectorStyleSheetForInlineStyle::setText(const String& text, ExceptionSta |
bool success = setStyleText(InspectorCSSId(id(), 0), text); |
if (!success) |
exceptionState.throwDOMException(SyntaxError, "Style sheet text is invalid."); |
- else |
- fireStyleSheetChanged(); |
return success; |
} |
@@ -1790,7 +1790,7 @@ bool InspectorStyleSheetForInlineStyle::setStyleText(const InspectorCSSId& id, c |
m_styleText = text; |
m_isStyleTextValid = true; |
m_ruleSourceData.clear(); |
- fireStyleSheetChanged(); |
+ onStyleSheetTextChanged(); |
} |
return !exceptionState.hadException(); |
} |