summaryrefslogtreecommitdiff
path: root/xfa/fde/css/cfde_cssstyleselector.cpp
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-01-23 15:39:01 -0500
committerChromium commit bot <commit-bot@chromium.org>2017-01-24 14:47:55 +0000
commitaee2d80f628ba02d0561c921b7bb1939b3480fca (patch)
tree15e3c3060fe9f7ef069ce901d371051212a0e4ab /xfa/fde/css/cfde_cssstyleselector.cpp
parent1339133720c3b8bce77e970b479ec179160f30b5 (diff)
downloadpdfium-aee2d80f628ba02d0561c921b7bb1939b3480fca.tar.xz
Cleanup memory in CFDE_CSSRuleCollection
This Cl cleans up the memory for the CFDE_CSSRuleCollection::Data parameter. Change-Id: I449ffdeebdc6463bf68b991fffecdc6cf0b25362 Reviewed-on: https://pdfium-review.googlesource.com/2296 Reviewed-by: Nicolás Peña <npm@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'xfa/fde/css/cfde_cssstyleselector.cpp')
-rw-r--r--xfa/fde/css/cfde_cssstyleselector.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/xfa/fde/css/cfde_cssstyleselector.cpp b/xfa/fde/css/cfde_cssstyleselector.cpp
index b7275fca93..63d8e0986b 100644
--- a/xfa/fde/css/cfde_cssstyleselector.cpp
+++ b/xfa/fde/css/cfde_cssstyleselector.cpp
@@ -85,27 +85,30 @@ int32_t CFDE_CSSStyleSelector::MatchDeclarations(
if (m_UARules.CountSelectors() == 0)
return 0;
- if (pCache->HashTag())
- MatchRules(pCache, m_UARules.GetTagRuleData(pCache->HashTag()));
-
- std::sort(m_MatchedRules.begin(), m_MatchedRules.end(),
- [](const CFDE_CSSRuleCollection::Data* p1,
- const CFDE_CSSRuleCollection::Data* p2) {
- return p1->dwPriority < p2->dwPriority;
- });
- for (const auto& rule : m_MatchedRules)
+ // The ::Data is owned by the m_RuleCollection.
+ std::vector<CFDE_CSSRuleCollection::Data*> matchedRules;
+
+ if (pCache->HashTag()) {
+ MatchRules(&matchedRules, pCache,
+ m_UARules.GetTagRuleData(pCache->HashTag()));
+ }
+
+ for (const auto& rule : matchedRules)
matchedDecls.Add(rule->pDeclaration);
- m_MatchedRules.clear();
return matchedDecls.GetSize();
}
-void CFDE_CSSStyleSelector::MatchRules(CFDE_CSSTagCache* pCache,
- CFDE_CSSRuleCollection::Data* pList) {
- while (pList) {
- if (MatchSelector(pCache, pList->pSelector))
- m_MatchedRules.push_back(pList);
- pList = pList->pNext;
+void CFDE_CSSStyleSelector::MatchRules(
+ std::vector<CFDE_CSSRuleCollection::Data*>* matchedRules,
+ CFDE_CSSTagCache* pCache,
+ const std::vector<std::unique_ptr<CFDE_CSSRuleCollection::Data>>* pList) {
+ if (!pList)
+ return;
+
+ for (const auto& d : *pList) {
+ if (MatchSelector(pCache, d->pSelector))
+ matchedRules->push_back(d.get());
}
}