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

Unified Diff: third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp

Issue 2060433002: Move SourceRange and CSSPropertySourceData classes off-heap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix untidy ref-ptr handling Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()
« no previous file with comments | « third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698