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 "JSDedicatedWorkerContext.h"
35 #include "JSSharedWorkerContext.h"
36 #include "JSWorkerContext.h"
37 #include "WorkerContext.h"
38
39 using namespace JSC;
40
41 namespace WebCore {
42
43 ASSERT_CLASS_FITS_IN_CELL(JSWorkerContextBase);
44
45 const ClassInfo JSWorkerContextBase::s_info = { "WorkerContext", &JSDOMGlobalObject::s_info, 0, 0 };
46
JSWorkerContextBase(NonNullPassRefPtr<JSC::Structure> structure,PassRefPtr<WorkerContext> impl)47 JSWorkerContextBase::JSWorkerContextBase(NonNullPassRefPtr<JSC::Structure> structure, PassRefPtr<WorkerContext> impl)
48 : JSDOMGlobalObject(structure, new JSDOMGlobalObjectData(normalWorld(*impl->script()->globalData())), this)
49 , m_impl(impl)
50 {
51 }
52
~JSWorkerContextBase()53 JSWorkerContextBase::~JSWorkerContextBase()
54 {
55 }
56
scriptExecutionContext() const57 ScriptExecutionContext* JSWorkerContextBase::scriptExecutionContext() const
58 {
59 return m_impl.get();
60 }
61
toJS(ExecState * exec,JSDOMGlobalObject *,WorkerContext * workerContext)62 JSValue toJS(ExecState* exec, JSDOMGlobalObject*, WorkerContext* workerContext)
63 {
64 return toJS(exec, workerContext);
65 }
66
toJS(ExecState *,WorkerContext * workerContext)67 JSValue toJS(ExecState*, WorkerContext* workerContext)
68 {
69 if (!workerContext)
70 return jsNull();
71 WorkerScriptController* script = workerContext->script();
72 if (!script)
73 return jsNull();
74 return script->workerContextWrapper();
75 }
76
toJSDedicatedWorkerContext(JSValue value)77 JSDedicatedWorkerContext* toJSDedicatedWorkerContext(JSValue value)
78 {
79 if (!value.isObject())
80 return 0;
81 const ClassInfo* classInfo = asObject(value)->classInfo();
82 if (classInfo == &JSDedicatedWorkerContext::s_info)
83 return static_cast<JSDedicatedWorkerContext*>(asObject(value));
84 return 0;
85 }
86
87 #if ENABLE(SHARED_WORKERS)
toJSSharedWorkerContext(JSValue value)88 JSSharedWorkerContext* toJSSharedWorkerContext(JSValue value)
89 {
90 if (!value.isObject())
91 return 0;
92 const ClassInfo* classInfo = asObject(value)->classInfo();
93 if (classInfo == &JSSharedWorkerContext::s_info)
94 return static_cast<JSSharedWorkerContext*>(asObject(value));
95 return 0;
96 }
97 #endif
98
toJSWorkerContext(JSValue value)99 JSWorkerContext* toJSWorkerContext(JSValue value)
100 {
101 JSWorkerContext* context = toJSDedicatedWorkerContext(value);
102 #if ENABLE(SHARED_WORKERS)
103 if (!context)
104 context = toJSSharedWorkerContext(value);
105 #endif
106 return context;
107 }
108
109 } // namespace WebCore
110
111 #endif // ENABLE(WORKERS)
112