• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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