1/*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
4 * Copyright (C) 2013 Google Inc. All rights reserved.
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB.  If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 *
21 */
22
23#ifndef DocumentRuleSets_h
24#define DocumentRuleSets_h
25
26#include "RuleFeature.h"
27#include "RuleSet.h"
28
29#include <wtf/OwnPtr.h>
30#include <wtf/RefPtr.h>
31#include <wtf/Vector.h>
32
33namespace WebCore {
34
35class CSSStyleRule;
36class CSSStyleSheet;
37class DocumentStyleSheetCollection;
38class InspectorCSSOMWrappers;
39class MatchRequest;
40class MediaQueryEvaluator;
41class RuleSet;
42class StyleScopeResolver;
43
44class DocumentRuleSets {
45public:
46    DocumentRuleSets();
47    ~DocumentRuleSets();
48    RuleSet* authorStyle() const { return m_authorStyle.get(); }
49    RuleSet* userStyle() const { return m_userStyle.get(); }
50    RuleFeatureSet& features() { return m_features; }
51    const RuleFeatureSet& features() const { return m_features; }
52    RuleSet* sibling() const { return m_siblingRuleSet.get(); }
53    RuleSet* uncommonAttribute() const { return m_uncommonAttributeRuleSet.get(); }
54
55    void initUserStyle(DocumentStyleSheetCollection*, const MediaQueryEvaluator&, StyleResolver&);
56    void resetAuthorStyle();
57    void appendAuthorStyleSheets(unsigned firstNew, const Vector<RefPtr<CSSStyleSheet> >&, MediaQueryEvaluator*, InspectorCSSOMWrappers&, bool isViewSource, StyleResolver*);
58
59    void collectFeatures(bool isViewSource, StyleScopeResolver*);
60
61private:
62    void collectRulesFromUserStyleSheets(const Vector<RefPtr<CSSStyleSheet> >&, RuleSet& userStyle, const MediaQueryEvaluator&, StyleResolver&);
63    OwnPtr<RuleSet> m_authorStyle;
64    OwnPtr<RuleSet> m_userStyle;
65    RuleFeatureSet m_features;
66    OwnPtr<RuleSet> m_siblingRuleSet;
67    OwnPtr<RuleSet> m_uncommonAttributeRuleSet;
68};
69
70} // namespace WebCore
71
72#endif // DocumentRuleSets_h
73