• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007, 2008, 2012 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef CSSKeyframesRule_h
27 #define CSSKeyframesRule_h
28 
29 #include "core/css/CSSRule.h"
30 #include "core/css/StyleRule.h"
31 #include "wtf/Forward.h"
32 #include "wtf/text/AtomicString.h"
33 
34 namespace WebCore {
35 
36 class CSSRuleList;
37 class StyleKeyframe;
38 class CSSKeyframeRule;
39 
40 class StyleRuleKeyframes FINAL : public StyleRuleBase {
41 public:
create()42     static PassRefPtrWillBeRawPtr<StyleRuleKeyframes> create() { return adoptRefWillBeNoop(new StyleRuleKeyframes()); }
43 
44     ~StyleRuleKeyframes();
45 
keyframes()46     const WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> >& keyframes() const { return m_keyframes; }
47 
48     void parserAppendKeyframe(PassRefPtrWillBeRawPtr<StyleKeyframe>);
49     void wrapperAppendKeyframe(PassRefPtrWillBeRawPtr<StyleKeyframe>);
50     void wrapperRemoveKeyframe(unsigned);
51 
name()52     String name() const { return m_name; }
setName(const String & name)53     void setName(const String& name) { m_name = AtomicString(name); }
54 
isVendorPrefixed()55     bool isVendorPrefixed() const { return m_isPrefixed; }
setVendorPrefixed(bool isPrefixed)56     void setVendorPrefixed(bool isPrefixed) { m_isPrefixed = isPrefixed; }
57 
58     int findKeyframeIndex(const String& key) const;
59 
copy()60     PassRefPtrWillBeRawPtr<StyleRuleKeyframes> copy() const { return adoptRefWillBeNoop(new StyleRuleKeyframes(*this)); }
61 
62     void traceAfterDispatch(Visitor*);
63 
64 private:
65     StyleRuleKeyframes();
66     explicit StyleRuleKeyframes(const StyleRuleKeyframes&);
67 
68     WillBeHeapVector<RefPtrWillBeMember<StyleKeyframe> > m_keyframes;
69     AtomicString m_name;
70     bool m_isPrefixed;
71 };
72 
73 DEFINE_STYLE_RULE_TYPE_CASTS(Keyframes);
74 
75 class CSSKeyframesRule FINAL : public CSSRule {
76 public:
create(StyleRuleKeyframes * rule,CSSStyleSheet * sheet)77     static PassRefPtrWillBeRawPtr<CSSKeyframesRule> create(StyleRuleKeyframes* rule, CSSStyleSheet* sheet)
78     {
79         return adoptRefWillBeNoop(new CSSKeyframesRule(rule, sheet));
80     }
81 
82     virtual ~CSSKeyframesRule();
83 
type()84     virtual CSSRule::Type type() const OVERRIDE { return KEYFRAMES_RULE; }
85     virtual String cssText() const OVERRIDE;
86     virtual void reattach(StyleRuleBase*) OVERRIDE;
87 
name()88     String name() const { return m_keyframesRule->name(); }
89     void setName(const String&);
90 
91     CSSRuleList* cssRules();
92 
93     void insertRule(const String& rule);
94     void deleteRule(const String& key);
95     CSSKeyframeRule* findRule(const String& key);
96 
97     // For IndexedGetter and CSSRuleList.
98     unsigned length() const;
99     CSSKeyframeRule* item(unsigned index) const;
100 
isVendorPrefixed()101     bool isVendorPrefixed() const { return m_isPrefixed; }
setVendorPrefixed(bool isPrefixed)102     void setVendorPrefixed(bool isPrefixed) { m_isPrefixed = isPrefixed; }
103 
104     virtual void trace(Visitor*) OVERRIDE;
105 
106 private:
107     CSSKeyframesRule(StyleRuleKeyframes*, CSSStyleSheet* parent);
108 
109     RefPtrWillBeMember<StyleRuleKeyframes> m_keyframesRule;
110     mutable WillBeHeapVector<RefPtrWillBeMember<CSSKeyframeRule> > m_childRuleCSSOMWrappers;
111     mutable OwnPtrWillBeMember<CSSRuleList> m_ruleListCSSOMWrapper;
112     bool m_isPrefixed;
113 };
114 
115 DEFINE_CSS_RULE_TYPE_CASTS(CSSKeyframesRule, KEYFRAMES_RULE);
116 
117 } // namespace WebCore
118 
119 #endif // CSSKeyframesRule_h
120