initial import
[vuplus_webkit] / Source / WebCore / bindings / js / JSDOMGlobalObject.cpp
1 /*
2  * Copyright (C) 2008, 2009 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
27 #include "config.h"
28 #include "JSDOMGlobalObject.h"
29
30 #include "Document.h"
31 #include "JSDOMWindow.h"
32 #include "JSEventListener.h"
33
34 #if ENABLE(WORKERS)
35 #include "JSWorkerContext.h"
36 #include "WorkerContext.h"
37 #endif
38
39 using namespace JSC;
40
41 namespace WebCore {
42
43 const ClassInfo JSDOMGlobalObject::s_info = { "DOMGlobalObject", &JSGlobalObject::s_info, 0, 0 };
44
45 JSDOMGlobalObject::JSDOMGlobalObject(JSGlobalData& globalData, Structure* structure, PassRefPtr<DOMWrapperWorld> world)
46     : JSGlobalObject(globalData, structure)
47     , m_currentEvent(0)
48     , m_world(world)
49 {
50 }
51
52 void JSDOMGlobalObject::finishCreation(JSGlobalData& globalData, JSObject* thisValue)
53 {
54     Base::finishCreation(globalData, thisValue);
55     ASSERT(inherits(&s_info));
56 }
57
58 void JSDOMGlobalObject::visitChildren(SlotVisitor& visitor)
59 {
60     ASSERT_GC_OBJECT_INHERITS(this, &s_info);
61     COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
62     ASSERT(structure()->typeInfo().overridesVisitChildren());
63     Base::visitChildren(visitor);
64
65     JSDOMStructureMap::iterator end = structures().end();
66     for (JSDOMStructureMap::iterator it = structures().begin(); it != end; ++it)
67         visitor.append(&it->second);
68
69     JSDOMConstructorMap::iterator end2 = constructors().end();
70     for (JSDOMConstructorMap::iterator it2 = constructors().begin(); it2 != end2; ++it2)
71         visitor.append(&it2->second);
72
73     if (m_injectedScript)
74         visitor.append(&m_injectedScript);
75 }
76
77 void JSDOMGlobalObject::setCurrentEvent(Event* currentEvent)
78 {
79     m_currentEvent = currentEvent;
80 }
81
82 Event* JSDOMGlobalObject::currentEvent() const
83 {
84     return m_currentEvent;
85 }
86
87 void JSDOMGlobalObject::setInjectedScript(JSObject* injectedScript)
88 {
89     m_injectedScript.setMayBeNull(globalData(), this, injectedScript);
90 }
91
92 JSObject* JSDOMGlobalObject::injectedScript() const
93 {
94     return m_injectedScript.get();
95 }
96
97 JSDOMGlobalObject* toJSDOMGlobalObject(Document* document, JSC::ExecState* exec)
98 {
99     return toJSDOMWindow(document->frame(), currentWorld(exec));
100 }
101
102 JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext, JSC::ExecState* exec)
103 {
104     if (scriptExecutionContext->isDocument())
105         return toJSDOMGlobalObject(static_cast<Document*>(scriptExecutionContext), exec);
106
107 #if ENABLE(WORKERS)
108     if (scriptExecutionContext->isWorkerContext())
109         return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
110 #endif
111
112     ASSERT_NOT_REACHED();
113     return 0;
114 }
115
116 JSDOMGlobalObject* toJSDOMGlobalObject(Document* document, DOMWrapperWorld* world)
117 {
118     return toJSDOMWindow(document->frame(), world);
119 }
120
121 JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext, DOMWrapperWorld* world)
122 {
123     if (scriptExecutionContext->isDocument())
124         return toJSDOMGlobalObject(static_cast<Document*>(scriptExecutionContext), world);
125
126 #if ENABLE(WORKERS)
127     if (scriptExecutionContext->isWorkerContext())
128         return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
129 #endif
130
131     ASSERT_NOT_REACHED();
132     return 0;
133 }
134
135 } // namespace WebCore