1 /*
2 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2009 Google Inc. All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 */
27
28 #include "config.h"
29
30 #if ENABLE(WORKERS)
31
32 #include "JSWorkerContextBase.h"
33
34 #include "DOMWrapperWorld.h"
35 #include "JSDedicatedWorkerContext.h"
36 #include "JSSharedWorkerContext.h"
37 #include "JSWorkerContext.h"
38 #include "WorkerContext.h"
39
40 using namespace JSC;
41
42 namespace WebCore {
43
44 ASSERT_CLASS_FITS_IN_CELL(JSWorkerContextBase);
45
46 const ClassInfo JSWorkerContextBase::s_info = { "WorkerContext", &JSDOMGlobalObject::s_info, 0, 0 };
47
JSWorkerContextBase(JSC::JSGlobalData & globalData,JSC::Structure * structure,PassRefPtr<WorkerContext> impl)48 JSWorkerContextBase::JSWorkerContextBase(JSC::JSGlobalData& globalData, JSC::Structure* structure, PassRefPtr<WorkerContext> impl)
49 : JSDOMGlobalObject(globalData, structure, normalWorld(globalData), this)
50 , m_impl(impl)
51 {
52 ASSERT(inherits(&s_info));
53 }
54
~JSWorkerContextBase()55 JSWorkerContextBase::~JSWorkerContextBase()
56 {
57 }
58
scriptExecutionContext() const59 ScriptExecutionContext* JSWorkerContextBase::scriptExecutionContext() const
60 {
61 return m_impl.get();
62 }
63
toJS(ExecState * exec,JSDOMGlobalObject *,WorkerContext * workerContext)64 JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerContext* workerContext)
65 {
66 return toJS(exec, workerContext);
67 }
68
toJS(ExecState *,WorkerContext * workerContext)69 JSValue toJS(ExecState*, WorkerContext* workerContext)
70 {
71 if (!workerContext)
72 return jsNull();
73 WorkerScriptController* script = workerContext->script();
74 if (!script)
75 return jsNull();
76 JSWorkerContext* contextWrapper = script->workerContextWrapper();
77 ASSERT(contextWrapper);
78 return contextWrapper;
79 }
80
toJSDedicatedWorkerContext(JSValue value)81 JSDedicatedWorkerContext* toJSDedicatedWorkerContext(JSValue value)
82 {
83 if (!value.isObject())
84 return 0;
85 const ClassInfo* classInfo = asObject(value)->classInfo();
86 if (classInfo == &JSDedicatedWorkerContext::s_info)
87 return static_cast<JSDedicatedWorkerContext*>(asObject(value));
88 return 0;
89 }
90
91 #if ENABLE(SHARED_WORKERS)
toJSSharedWorkerContext(JSValue value)92 JSSharedWorkerContext* toJSSharedWorkerContext(JSValue value)
93 {
94 if (!value.isObject())
95 return 0;
96 const ClassInfo* classInfo = asObject(value)->classInfo();
97 if (classInfo == &JSSharedWorkerContext::s_info)
98 return static_cast<JSSharedWorkerContext*>(asObject(value));
99 return 0;
100 }
101 #endif
102
toJSWorkerContext(JSValue value)103 JSWorkerContext* toJSWorkerContext(JSValue value)
104 {
105 JSWorkerContext* context = toJSDedicatedWorkerContext(value);
106 #if ENABLE(SHARED_WORKERS)
107 if (!context)
108 context = toJSSharedWorkerContext(value);
109 #endif
110 return context;
111 }
112
113 } // namespace WebCore
114
115 #endif // ENABLE(WORKERS)
116