summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/RuleFeature.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/css/RuleFeature.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/css/RuleFeature.h')
-rw-r--r--Source/WebCore/css/RuleFeature.h50
1 files changed, 32 insertions, 18 deletions
diff --git a/Source/WebCore/css/RuleFeature.h b/Source/WebCore/css/RuleFeature.h
index 58122e027..d240a850a 100644
--- a/Source/WebCore/css/RuleFeature.h
+++ b/Source/WebCore/css/RuleFeature.h
@@ -1,6 +1,6 @@
/*
* Copyright (C) 1999 Lars Knoll (knoll@kde.org)
- * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2011, 2014 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -19,18 +19,19 @@
*
*/
-#ifndef RuleFeature_h
-#define RuleFeature_h
+#pragma once
+#include "CSSSelector.h"
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/text/AtomicString.h>
+#include <wtf/text/AtomicStringHash.h>
namespace WebCore {
+class RuleData;
class StyleRule;
-class CSSSelector;
struct RuleFeature {
RuleFeature(StyleRule* rule, unsigned selectorIndex, bool hasDocumentSecurityOrigin)
@@ -45,25 +46,38 @@ struct RuleFeature {
};
struct RuleFeatureSet {
- RuleFeatureSet()
- : usesFirstLineRules(false)
- , usesBeforeAfterRules(false)
- { }
-
void add(const RuleFeatureSet&);
void clear();
+ void shrinkToFit();
+ void collectFeatures(const RuleData&);
- void collectFeaturesFromSelector(const CSSSelector*);
-
- HashSet<AtomicStringImpl*> idsInRules;
- HashSet<AtomicStringImpl*> classesInRules;
- HashSet<AtomicStringImpl*> attrsInRules;
+ HashSet<AtomicString> idsInRules;
+ HashSet<AtomicString> idsMatchingAncestorsInRules;
+ HashSet<AtomicString> classesInRules;
+ HashSet<AtomicString> attributeCanonicalLocalNamesInRules;
+ HashSet<AtomicString> attributeLocalNamesInRules;
Vector<RuleFeature> siblingRules;
Vector<RuleFeature> uncommonAttributeRules;
- bool usesFirstLineRules;
- bool usesBeforeAfterRules;
+ HashMap<AtomicString, std::unique_ptr<Vector<RuleFeature>>> ancestorClassRules;
+
+ struct AttributeRules {
+ WTF_MAKE_FAST_ALLOCATED;
+ public:
+ using SelectorKey = std::pair<AtomicStringImpl*, std::pair<AtomicStringImpl*, unsigned>>;
+ HashMap<SelectorKey, const CSSSelector*> selectors;
+ Vector<RuleFeature> features;
+ };
+ HashMap<AtomicString, std::unique_ptr<AttributeRules>> ancestorAttributeRulesForHTML;
+ bool usesFirstLineRules { false };
+ bool usesFirstLetterRules { false };
+
+private:
+ struct SelectorFeatures {
+ bool hasSiblingSelector { false };
+ Vector<AtomicString, 32> classesMatchingAncestors;
+ Vector<const CSSSelector*> attributeSelectorsMatchingAncestors;
+ };
+ void recursivelyCollectFeaturesFromSelector(SelectorFeatures&, const CSSSelector&, bool matchesAncestor = false);
};
} // namespace WebCore
-
-#endif // RuleFeature_h