1/*
2 * Copyright (C) 2007, 2008 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 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 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#include "config.h"
27#include "JSCSSRule.h"
28
29#include "CSSCharsetRule.h"
30#include "CSSFontFaceRule.h"
31#include "CSSImportRule.h"
32#include "CSSMediaRule.h"
33#include "CSSPageRule.h"
34#include "CSSStyleRule.h"
35#include "CSSSupportsRule.h"
36#include "JSCSSCharsetRule.h"
37#include "JSCSSFontFaceRule.h"
38#include "JSCSSImportRule.h"
39#include "JSCSSMediaRule.h"
40#include "JSCSSPageRule.h"
41#include "JSCSSStyleRule.h"
42#include "JSCSSSupportsRule.h"
43#include "JSNode.h"
44#include "JSStyleSheetCustom.h"
45#include "JSWebKitCSSKeyframeRule.h"
46#include "JSWebKitCSSKeyframesRule.h"
47#include "JSWebKitCSSRegionRule.h"
48#include "JSWebKitCSSViewportRule.h"
49#include "WebKitCSSKeyframeRule.h"
50#include "WebKitCSSKeyframesRule.h"
51#include "WebKitCSSRegionRule.h"
52#include "WebKitCSSViewportRule.h"
53
54using namespace JSC;
55
56namespace WebCore {
57
58void JSCSSRule::visitAdditionalChildren(SlotVisitor& visitor)
59{
60    visitor.addOpaqueRoot(root(&impl()));
61}
62
63JSValue toJS(ExecState*, JSDOMGlobalObject* globalObject, CSSRule* rule)
64{
65    if (!rule)
66        return jsNull();
67
68    JSObject* wrapper = getCachedWrapper(globalObject->world(), rule);
69    if (wrapper)
70        return wrapper;
71
72    switch (rule->type()) {
73        case CSSRule::STYLE_RULE:
74            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSStyleRule, rule);
75            break;
76        case CSSRule::MEDIA_RULE:
77            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSMediaRule, rule);
78            break;
79        case CSSRule::FONT_FACE_RULE:
80            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSFontFaceRule, rule);
81            break;
82        case CSSRule::PAGE_RULE:
83            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSPageRule, rule);
84            break;
85        case CSSRule::IMPORT_RULE:
86            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSImportRule, rule);
87            break;
88        case CSSRule::CHARSET_RULE:
89            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSCharsetRule, rule);
90            break;
91        case CSSRule::WEBKIT_KEYFRAME_RULE:
92            wrapper = CREATE_DOM_WRAPPER(globalObject, WebKitCSSKeyframeRule, rule);
93            break;
94        case CSSRule::WEBKIT_KEYFRAMES_RULE:
95            wrapper = CREATE_DOM_WRAPPER(globalObject, WebKitCSSKeyframesRule, rule);
96            break;
97#if ENABLE(CSS3_CONDITIONAL_RULES)
98        case CSSRule::SUPPORTS_RULE:
99            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSSupportsRule, rule);
100            break;
101#endif
102#if ENABLE(CSS_DEVICE_ADAPTATION)
103        case CSSRule::WEBKIT_VIEWPORT_RULE:
104            wrapper = CREATE_DOM_WRAPPER(globalObject, WebKitCSSViewportRule, rule);
105            break;
106#endif
107#if ENABLE(CSS_REGIONS)
108        case CSSRule::WEBKIT_REGION_RULE:
109            wrapper = CREATE_DOM_WRAPPER(globalObject, WebKitCSSRegionRule, rule);
110            break;
111#endif
112        default:
113            wrapper = CREATE_DOM_WRAPPER(globalObject, CSSRule, rule);
114    }
115
116    return wrapper;
117}
118
119} // namespace WebCore
120