Home | History | Annotate | Download | only in js
      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, JSObject* thisValue)
     46     : JSGlobalObject(globalData, structure, thisValue)
     47     , m_currentEvent(0)
     48     , m_world(world)
     49 {
     50     ASSERT(inherits(&s_info));
     51 }
     52 
     53 void JSDOMGlobalObject::markChildren(MarkStack& markStack)
     54 {
     55     Base::markChildren(markStack);
     56 
     57     JSDOMStructureMap::iterator end = structures().end();
     58     for (JSDOMStructureMap::iterator it = structures().begin(); it != end; ++it)
     59         markStack.append(&it->second);
     60 
     61     JSDOMConstructorMap::iterator end2 = constructors().end();
     62     for (JSDOMConstructorMap::iterator it2 = constructors().begin(); it2 != end2; ++it2)
     63         markStack.append(&it2->second);
     64 
     65     if (m_injectedScript)
     66         markStack.append(&m_injectedScript);
     67 }
     68 
     69 void JSDOMGlobalObject::setCurrentEvent(Event* currentEvent)
     70 {
     71     m_currentEvent = currentEvent;
     72 }
     73 
     74 Event* JSDOMGlobalObject::currentEvent() const
     75 {
     76     return m_currentEvent;
     77 }
     78 
     79 void JSDOMGlobalObject::setInjectedScript(JSObject* injectedScript)
     80 {
     81     m_injectedScript.set(globalData(), this, injectedScript);
     82 }
     83 
     84 JSObject* JSDOMGlobalObject::injectedScript() const
     85 {
     86     return m_injectedScript.get();
     87 }
     88 
     89 JSDOMGlobalObject* toJSDOMGlobalObject(Document* document, JSC::ExecState* exec)
     90 {
     91     return toJSDOMWindow(document->frame(), currentWorld(exec));
     92 }
     93 
     94 JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext, JSC::ExecState* exec)
     95 {
     96     if (scriptExecutionContext->isDocument())
     97         return toJSDOMGlobalObject(static_cast<Document*>(scriptExecutionContext), exec);
     98 
     99 #if ENABLE(WORKERS)
    100     if (scriptExecutionContext->isWorkerContext())
    101         return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
    102 #endif
    103 
    104     ASSERT_NOT_REACHED();
    105     return 0;
    106 }
    107 
    108 JSDOMGlobalObject* toJSDOMGlobalObject(Document* document, DOMWrapperWorld* world)
    109 {
    110     return toJSDOMWindow(document->frame(), world);
    111 }
    112 
    113 JSDOMGlobalObject* toJSDOMGlobalObject(ScriptExecutionContext* scriptExecutionContext, DOMWrapperWorld* world)
    114 {
    115     if (scriptExecutionContext->isDocument())
    116         return toJSDOMGlobalObject(static_cast<Document*>(scriptExecutionContext), world);
    117 
    118 #if ENABLE(WORKERS)
    119     if (scriptExecutionContext->isWorkerContext())
    120         return static_cast<WorkerContext*>(scriptExecutionContext)->script()->workerContextWrapper();
    121 #endif
    122 
    123     ASSERT_NOT_REACHED();
    124     return 0;
    125 }
    126 
    127 } // namespace WebCore
    128