| Index: third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
|
| diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
|
| index fa7730a8dba198ea819b40c536d4475c4fb34871..ace6c4db8decd869cb47bf704e65c7b34d35f04e 100644
|
| --- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
|
| +++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
|
| @@ -79,6 +79,8 @@ public:
|
| : m_parsedText(parsedText)
|
| , m_document(document)
|
| , m_result(result)
|
| + , m_currentRuleData(nullptr)
|
| + , m_currentMediaQueryData(nullptr)
|
| , m_mediaQueryExpValueRangeStart(UINT_MAX)
|
| {
|
| ASSERT(m_result);
|
| @@ -97,8 +99,8 @@ private:
|
| void startMediaQuery() override;
|
| void endMediaQuery() override;
|
|
|
| - void addNewRuleToSourceTree(CSSRuleSourceData*);
|
| - CSSRuleSourceData* popRuleData();
|
| + void addNewRuleToSourceTree(PassRefPtr<CSSRuleSourceData>);
|
| + PassRefPtr<CSSRuleSourceData> popRuleData();
|
| template <typename CharacterType> inline void setRuleHeaderEnd(const CharacterType*, unsigned);
|
| void fixUnparsedPropertyRanges(CSSRuleSourceData*);
|
|
|
| @@ -106,8 +108,8 @@ private:
|
| Member<Document> m_document;
|
| RuleSourceDataList* m_result;
|
| RuleSourceDataList m_currentRuleDataStack;
|
| - Member<CSSRuleSourceData> m_currentRuleData;
|
| - Member<CSSMediaQuerySourceData> m_currentMediaQueryData;
|
| + CSSRuleSourceData* m_currentRuleData;
|
| + CSSMediaQuerySourceData* m_currentMediaQueryData;
|
| unsigned m_mediaQueryExpValueRangeStart;
|
| };
|
|
|
| @@ -117,10 +119,10 @@ void StyleSheetHandler::startRuleHeader(StyleRule::RuleType type, unsigned offse
|
| if (m_currentRuleData)
|
| m_currentRuleDataStack.removeLast();
|
|
|
| - CSSRuleSourceData* data = CSSRuleSourceData::create(type);
|
| + RefPtr<CSSRuleSourceData> data = CSSRuleSourceData::create(type);
|
| data->ruleHeaderRange.start = offset;
|
| - m_currentRuleData = data;
|
| - m_currentRuleDataStack.append(data);
|
| + m_currentRuleData = data.get();
|
| + m_currentRuleDataStack.append(data.release());
|
| }
|
|
|
| template <typename CharacterType>
|
| @@ -156,7 +158,7 @@ void StyleSheetHandler::observeSelector(unsigned startOffset, unsigned endOffset
|
|
|
| void StyleSheetHandler::startRuleBody(unsigned offset)
|
| {
|
| - m_currentRuleData.clear();
|
| + m_currentRuleData = nullptr;
|
| ASSERT(!m_currentRuleDataStack.isEmpty());
|
| if (m_parsedText[offset] == '{')
|
| ++offset; // Skip the rule body opening brace.
|
| @@ -167,13 +169,13 @@ void StyleSheetHandler::endRuleBody(unsigned offset)
|
| {
|
| ASSERT(!m_currentRuleDataStack.isEmpty());
|
| m_currentRuleDataStack.last()->ruleBodyRange.end = offset;
|
| - CSSRuleSourceData* rule = popRuleData();
|
| + RefPtr<CSSRuleSourceData> rule = popRuleData();
|
|
|
| - fixUnparsedPropertyRanges(rule);
|
| - addNewRuleToSourceTree(rule);
|
| + fixUnparsedPropertyRanges(rule.get());
|
| + addNewRuleToSourceTree(rule.release());
|
| }
|
|
|
| -void StyleSheetHandler::addNewRuleToSourceTree(CSSRuleSourceData* rule)
|
| +void StyleSheetHandler::addNewRuleToSourceTree(PassRefPtr<CSSRuleSourceData> rule)
|
| {
|
| if (m_currentRuleDataStack.isEmpty())
|
| m_result->append(rule);
|
| @@ -181,19 +183,19 @@ void StyleSheetHandler::addNewRuleToSourceTree(CSSRuleSourceData* rule)
|
| m_currentRuleDataStack.last()->childRules.append(rule);
|
| }
|
|
|
| -CSSRuleSourceData* StyleSheetHandler::popRuleData()
|
| +PassRefPtr<CSSRuleSourceData> StyleSheetHandler::popRuleData()
|
| {
|
| ASSERT(!m_currentRuleDataStack.isEmpty());
|
| - m_currentRuleData.clear();
|
| - CSSRuleSourceData* data = m_currentRuleDataStack.last();
|
| + m_currentRuleData = nullptr;
|
| + RefPtr<CSSRuleSourceData> data = m_currentRuleDataStack.last().get();
|
| m_currentRuleDataStack.removeLast();
|
| - return data;
|
| + return data.release();
|
| }
|
|
|
| template <typename CharacterType>
|
| static inline void fixUnparsedProperties(const CharacterType* characters, CSSRuleSourceData* ruleData)
|
| {
|
| - HeapVector<CSSPropertySourceData>& propertyData = ruleData->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& propertyData = ruleData->styleSourceData->propertyData;
|
| unsigned size = propertyData.size();
|
| if (!size)
|
| return;
|
| @@ -294,7 +296,7 @@ void StyleSheetHandler::observeComment(unsigned startOffset, unsigned endOffset)
|
|
|
| StyleSheetHandler handler(commentText, m_document, &sourceData);
|
| CSSParser::parseDeclarationListForInspector(parserContextForDocument(m_document), commentText, handler);
|
| - HeapVector<CSSPropertySourceData>& commentPropertyData = sourceData.first()->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& commentPropertyData = sourceData.first()->styleSourceData->propertyData;
|
| if (commentPropertyData.size() != 1)
|
| return;
|
| CSSPropertySourceData& propertyData = commentPropertyData.at(0);
|
| @@ -327,14 +329,14 @@ void StyleSheetHandler::endMediaQueryExp(unsigned offset)
|
| void StyleSheetHandler::startMediaQuery()
|
| {
|
| ASSERT(m_currentRuleDataStack.size() && m_currentRuleDataStack.last()->mediaSourceData);
|
| - CSSMediaQuerySourceData* data = CSSMediaQuerySourceData::create();
|
| - m_currentMediaQueryData = data;
|
| - m_currentRuleDataStack.last()->mediaSourceData->queryData.append(data);
|
| + std::unique_ptr<CSSMediaQuerySourceData> data = CSSMediaQuerySourceData::create();
|
| + m_currentMediaQueryData = data.get();
|
| + m_currentRuleDataStack.last()->mediaSourceData->queryData.append(std::move(data));
|
| }
|
|
|
| void StyleSheetHandler::endMediaQuery()
|
| {
|
| - m_currentMediaQueryData.clear();
|
| + m_currentMediaQueryData = nullptr;
|
| }
|
|
|
| bool verifyRuleText(Document* document, const String& ruleText)
|
| @@ -355,7 +357,7 @@ bool verifyRuleText(Document* document, const String& ruleText)
|
| if (!sourceData.at(0)->styleSourceData)
|
| return false;
|
|
|
| - HeapVector<CSSPropertySourceData>& propertyData = sourceData.at(1)->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& propertyData = sourceData.at(1)->styleSourceData->propertyData;
|
| unsigned propertyCount = propertyData.size();
|
|
|
| // Exactly one property should be in rule.
|
| @@ -388,7 +390,7 @@ bool verifyKeyframeKeyText(Document* document, const String& keyText)
|
| return false;
|
|
|
| // Exactly one property should be in keyframe rule.
|
| - HeapVector<CSSPropertySourceData>& propertyData = sourceData.at(1)->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& propertyData = sourceData.at(1)->styleSourceData->propertyData;
|
| unsigned propertyCount = propertyData.size();
|
| if (propertyCount != 1)
|
| return false;
|
| @@ -411,7 +413,7 @@ bool verifySelectorText(Document* document, const String& selectorText)
|
| return false;
|
|
|
| // Exactly one property should be in style rule.
|
| - HeapVector<CSSPropertySourceData>& propertyData = sourceData.at(0)->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& propertyData = sourceData.at(0)->styleSourceData->propertyData;
|
| unsigned propertyCount = propertyData.size();
|
| if (propertyCount != 1)
|
| return false;
|
| @@ -444,7 +446,7 @@ bool verifyMediaText(Document* document, const String& mediaText)
|
| return false;
|
|
|
| // Exactly one property should be in style rule.
|
| - HeapVector<CSSPropertySourceData>& propertyData = childSourceData.at(0)->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& propertyData = childSourceData.at(0)->styleSourceData->propertyData;
|
| unsigned propertyCount = propertyData.size();
|
| if (propertyCount != 1)
|
| return false;
|
| @@ -456,10 +458,10 @@ bool verifyMediaText(Document* document, const String& mediaText)
|
| return true;
|
| }
|
|
|
| -void flattenSourceData(RuleSourceDataList* dataList, RuleSourceDataList* result)
|
| +void flattenSourceData(const RuleSourceDataList& dataList, RuleSourceDataList* result)
|
| {
|
| - for (size_t i = 0; i < dataList->size(); ++i) {
|
| - Member<CSSRuleSourceData>& data = dataList->at(i);
|
| + for (size_t i = 0; i < dataList.size(); ++i) {
|
| + const RefPtr<CSSRuleSourceData>& data = dataList.at(i);
|
|
|
| // The result->append()'ed types should be exactly the same as in collectFlatRules().
|
| switch (data->type) {
|
| @@ -469,13 +471,13 @@ void flattenSourceData(RuleSourceDataList* dataList, RuleSourceDataList* result)
|
| case StyleRule::FontFace:
|
| case StyleRule::Viewport:
|
| case StyleRule::Keyframe:
|
| - result->append(data);
|
| + result->append(data.get());
|
| break;
|
| case StyleRule::Media:
|
| case StyleRule::Supports:
|
| case StyleRule::Keyframes:
|
| - result->append(data);
|
| - flattenSourceData(&data->childRules, result);
|
| + result->append(data.get());
|
| + flattenSourceData(data->childRules, result);
|
| break;
|
| default:
|
| break;
|
| @@ -690,19 +692,23 @@ std::unique_ptr<protocol::CSS::SourceRange> InspectorStyleSheetBase::buildSource
|
| return result;
|
| }
|
|
|
| -InspectorStyle* InspectorStyle::create(CSSStyleDeclaration* style, CSSRuleSourceData* sourceData, InspectorStyleSheetBase* parentStyleSheet)
|
| +InspectorStyle* InspectorStyle::create(CSSStyleDeclaration* style, PassRefPtr<CSSRuleSourceData> sourceData, InspectorStyleSheetBase* parentStyleSheet)
|
| {
|
| return new InspectorStyle(style, sourceData, parentStyleSheet);
|
| }
|
|
|
| -InspectorStyle::InspectorStyle(CSSStyleDeclaration* style, CSSRuleSourceData* sourceData, InspectorStyleSheetBase* parentStyleSheet)
|
| +InspectorStyle::InspectorStyle(CSSStyleDeclaration* style, PassRefPtr<CSSRuleSourceData> sourceData, InspectorStyleSheetBase* parentStyleSheet)
|
| : m_style(style)
|
| - , m_sourceData(sourceData)
|
| + , m_sourceData(std::move(sourceData))
|
| , m_parentStyleSheet(parentStyleSheet)
|
| {
|
| ASSERT(m_style);
|
| }
|
|
|
| +InspectorStyle::~InspectorStyle()
|
| +{
|
| +}
|
| +
|
| std::unique_ptr<protocol::CSS::CSSStyle> InspectorStyle::buildObjectForStyle()
|
| {
|
| std::unique_ptr<protocol::CSS::CSSStyle> result = styleWithProperties();
|
| @@ -724,7 +730,7 @@ std::unique_ptr<protocol::CSS::CSSStyle> InspectorStyle::buildObjectForStyle()
|
| std::unique_ptr<protocol::Array<protocol::CSS::CSSComputedStyleProperty>> InspectorStyle::buildArrayForComputedStyle()
|
| {
|
| std::unique_ptr<protocol::Array<protocol::CSS::CSSComputedStyleProperty>> result = protocol::Array<protocol::CSS::CSSComputedStyleProperty>::create();
|
| - HeapVector<CSSPropertySourceData> properties;
|
| + Vector<CSSPropertySourceData> properties;
|
| populateAllProperties(properties);
|
|
|
| for (auto& property : properties) {
|
| @@ -759,12 +765,12 @@ bool InspectorStyle::textForRange(const SourceRange& range, String* result)
|
| return true;
|
| }
|
|
|
| -void InspectorStyle::populateAllProperties(HeapVector<CSSPropertySourceData>& result)
|
| +void InspectorStyle::populateAllProperties(Vector<CSSPropertySourceData>& result)
|
| {
|
| HashSet<String> sourcePropertyNames;
|
|
|
| if (m_sourceData && m_sourceData->styleSourceData) {
|
| - HeapVector<CSSPropertySourceData>& sourcePropertyData = m_sourceData->styleSourceData->propertyData;
|
| + Vector<CSSPropertySourceData>& sourcePropertyData = m_sourceData->styleSourceData->propertyData;
|
| for (const auto& data : sourcePropertyData) {
|
| result.append(data);
|
| sourcePropertyNames.add(data.name.lower());
|
| @@ -789,7 +795,7 @@ std::unique_ptr<protocol::CSS::CSSStyle> InspectorStyle::styleWithProperties()
|
| std::unique_ptr<Array<protocol::CSS::ShorthandEntry>> shorthandEntries = Array<protocol::CSS::ShorthandEntry>::create();
|
| HashSet<String> foundShorthands;
|
|
|
| - HeapVector<CSSPropertySourceData> properties;
|
| + Vector<CSSPropertySourceData> properties;
|
| populateAllProperties(properties);
|
|
|
| for (auto& styleProperty : properties) {
|
| @@ -871,7 +877,6 @@ String InspectorStyle::shorthandValue(const String& shorthandProperty)
|
|
|
| DEFINE_TRACE(InspectorStyle)
|
| {
|
| - visitor->trace(m_sourceData);
|
| visitor->trace(m_style);
|
| visitor->trace(m_parentStyleSheet);
|
| }
|
| @@ -948,7 +953,6 @@ DEFINE_TRACE(InspectorStyleSheet)
|
| visitor->trace(m_resourceContainer);
|
| visitor->trace(m_networkAgent);
|
| visitor->trace(m_pageStyleSheet);
|
| - visitor->trace(m_sourceData);
|
| visitor->trace(m_cssomFlatRules);
|
| visitor->trace(m_parsedFlatRules);
|
| InspectorStyleSheetBase::trace(visitor);
|
| @@ -1103,11 +1107,11 @@ CSSRuleSourceData* InspectorStyleSheet::ruleSourceDataAfterSourceRange(const Sou
|
| ASSERT(m_sourceData);
|
| unsigned index = 0;
|
| for (; index < m_sourceData->size(); ++index) {
|
| - CSSRuleSourceData* sd = m_sourceData->at(index);
|
| + CSSRuleSourceData* sd = m_sourceData->at(index).get();
|
| if (sd->ruleHeaderRange.start >= sourceRange.end)
|
| break;
|
| }
|
| - return index < m_sourceData->size() ? m_sourceData->at(index) : nullptr;
|
| + return index < m_sourceData->size() ? m_sourceData->at(index).get() : nullptr;
|
| }
|
|
|
| CSSStyleRule* InspectorStyleSheet::insertCSSOMRuleInStyleSheet(CSSRule* insertBefore, const String& ruleText, ExceptionState& exceptionState)
|
| @@ -1156,7 +1160,7 @@ CSSStyleRule* InspectorStyleSheet::insertCSSOMRuleBySourceRange(const SourceRang
|
|
|
| CSSRuleSourceData* containingRuleSourceData = nullptr;
|
| for (size_t i = 0; i < m_sourceData->size(); ++i) {
|
| - CSSRuleSourceData* ruleSourceData = m_sourceData->at(i);
|
| + CSSRuleSourceData* ruleSourceData = m_sourceData->at(i).get();
|
| if (ruleSourceData->ruleHeaderRange.start < sourceRange.start && sourceRange.start < ruleSourceData->ruleBodyRange.start) {
|
| exceptionState.throwDOMException(NotFoundError, "Cannot insert rule inside rule selector.");
|
| return nullptr;
|
| @@ -1219,7 +1223,7 @@ bool InspectorStyleSheet::deleteRule(const SourceRange& range, ExceptionState& e
|
| CSSRuleSourceData* foundData = nullptr;
|
|
|
| for (size_t i = 0; i < m_sourceData->size(); ++i) {
|
| - CSSRuleSourceData* ruleSourceData = m_sourceData->at(i);
|
| + CSSRuleSourceData* ruleSourceData = m_sourceData->at(i).get();
|
| unsigned ruleStart = ruleSourceData->ruleHeaderRange.start;
|
| unsigned ruleEnd = ruleSourceData->ruleBodyRange.end + 1;
|
| bool startBelongs = ruleStart >= range.start && ruleStart < range.end;
|
| @@ -1284,9 +1288,9 @@ void InspectorStyleSheet::replaceText(const SourceRange& range, const String& te
|
|
|
| void InspectorStyleSheet::innerSetText(const String& text, bool markAsLocallyModified)
|
| {
|
| - RuleSourceDataList* ruleTree = new RuleSourceDataList();
|
| + RuleSourceDataList ruleTree;
|
| StyleSheetContents* styleSheet = StyleSheetContents::create(m_pageStyleSheet->contents()->parserContext());
|
| - StyleSheetHandler handler(text, m_pageStyleSheet->ownerDocument(), ruleTree);
|
| + StyleSheetHandler handler(text, m_pageStyleSheet->ownerDocument(), &ruleTree);
|
| CSSParser::parseSheetForInspector(m_pageStyleSheet->contents()->parserContext(), styleSheet, text, handler);
|
| CSSStyleSheet* sourceDataSheet = nullptr;
|
| if (toCSSImportRule(m_pageStyleSheet->ownerRule()))
|
| @@ -1297,7 +1301,7 @@ void InspectorStyleSheet::innerSetText(const String& text, bool markAsLocallyMod
|
| m_parsedFlatRules.clear();
|
| collectFlatRules(sourceDataSheet, &m_parsedFlatRules);
|
|
|
| - m_sourceData = new RuleSourceDataList();
|
| + m_sourceData = wrapUnique(new RuleSourceDataList());
|
| flattenSourceData(ruleTree, m_sourceData.get());
|
| m_text = text;
|
|
|
| @@ -1456,7 +1460,7 @@ std::unique_ptr<protocol::CSS::SourceRange> InspectorStyleSheet::mediaQueryExpVa
|
| CSSRuleSourceData* sourceData = sourceDataForRule(rule);
|
| if (!sourceData || !sourceData->mediaSourceData || mediaQueryIndex >= sourceData->mediaSourceData->queryData.size())
|
| return nullptr;
|
| - CSSMediaQuerySourceData* mediaQueryData = sourceData->mediaSourceData->queryData.at(mediaQueryIndex);
|
| + CSSMediaQuerySourceData* mediaQueryData = sourceData->mediaSourceData->queryData.at(mediaQueryIndex).get();
|
| if (mediaQueryExpIndex >= mediaQueryData->expData.size())
|
| return nullptr;
|
| return buildSourceRangeObject(mediaQueryData->expData.at(mediaQueryExpIndex).valueRange);
|
| @@ -1545,7 +1549,7 @@ CSSRuleSourceData* InspectorStyleSheet::findRuleByHeaderRange(const SourceRange&
|
| return nullptr;
|
|
|
| for (size_t i = 0; i < m_sourceData->size(); ++i) {
|
| - CSSRuleSourceData* ruleSourceData = m_sourceData->at(i);
|
| + CSSRuleSourceData* ruleSourceData = m_sourceData->at(i).get();
|
| if (ruleSourceData->ruleHeaderRange.start == sourceRange.start && ruleSourceData->ruleHeaderRange.end == sourceRange.end) {
|
| return ruleSourceData;
|
| }
|
| @@ -1559,7 +1563,7 @@ CSSRuleSourceData* InspectorStyleSheet::findRuleByBodyRange(const SourceRange& s
|
| return nullptr;
|
|
|
| for (size_t i = 0; i < m_sourceData->size(); ++i) {
|
| - CSSRuleSourceData* ruleSourceData = m_sourceData->at(i);
|
| + CSSRuleSourceData* ruleSourceData = m_sourceData->at(i).get();
|
| if (ruleSourceData->ruleBodyRange.start == sourceRange.start && ruleSourceData->ruleBodyRange.end == sourceRange.end) {
|
| return ruleSourceData;
|
| }
|
| @@ -1611,7 +1615,7 @@ CSSRuleSourceData* InspectorStyleSheet::sourceDataForRule(CSSRule* rule)
|
| if (canonicalCSSText(rule) != canonicalCSSText(parsedRule))
|
| return nullptr;
|
|
|
| - return m_sourceData->at(it->value);
|
| + return m_sourceData->at(it->value).get();
|
| }
|
|
|
| void InspectorStyleSheet::remapSourceDataToCSSOMIfNecessary()
|
| @@ -1749,10 +1753,10 @@ InspectorStyle* InspectorStyleSheetForInlineStyle::inspectorStyle(CSSStyleDeclar
|
| return m_inspectorStyle;
|
| }
|
|
|
| -CSSRuleSourceData* InspectorStyleSheetForInlineStyle::ruleSourceData()
|
| +PassRefPtr<CSSRuleSourceData> InspectorStyleSheetForInlineStyle::ruleSourceData()
|
| {
|
| const String& text = elementStyleText();
|
| - CSSRuleSourceData* ruleSourceData = nullptr;
|
| + RefPtr<CSSRuleSourceData> ruleSourceData;
|
| if (text.isEmpty()) {
|
| ruleSourceData = CSSRuleSourceData::create(StyleRule::Style);
|
| ruleSourceData->ruleBodyRange.start = 0;
|
| @@ -1763,7 +1767,7 @@ CSSRuleSourceData* InspectorStyleSheetForInlineStyle::ruleSourceData()
|
| CSSParser::parseDeclarationListForInspector(parserContextForDocument(&m_element->document()), text, handler);
|
| ruleSourceData = ruleSourceDataResult.first().release();
|
| }
|
| - return ruleSourceData;
|
| + return ruleSourceData.release();
|
| }
|
|
|
| CSSStyleDeclaration* InspectorStyleSheetForInlineStyle::inlineStyle()
|
|
|