1 /* 2 * Copyright (C) 2008 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 * 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 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef JSDOMWindowShell_h 30 #define JSDOMWindowShell_h 31 32 #include "JSDOMWindow.h" 33 34 namespace WebCore { 35 36 class DOMWindow; 37 class Frame; 38 39 class JSDOMWindowShell : public JSC::JSNonFinalObject { 40 typedef JSC::JSNonFinalObject Base; 41 public: 42 JSDOMWindowShell(PassRefPtr<DOMWindow>, DOMWrapperWorld* world); 43 virtual ~JSDOMWindowShell(); 44 window()45 JSDOMWindow* window() const { return m_window.get(); } setWindow(JSC::JSGlobalData & globalData,JSDOMWindow * window)46 void setWindow(JSC::JSGlobalData& globalData, JSDOMWindow* window) 47 { 48 ASSERT_ARG(window, window); 49 m_window.set(globalData, this, window); 50 setPrototype(globalData, window->prototype()); 51 } 52 void setWindow(PassRefPtr<DOMWindow>); 53 54 static const JSC::ClassInfo s_info; 55 56 DOMWindow* impl() const; 57 58 void* operator new(size_t); 59 createStructure(JSC::JSGlobalData & globalData,JSC::JSValue prototype)60 static JSC::Structure* createStructure(JSC::JSGlobalData& globalData, JSC::JSValue prototype) 61 { 62 return JSC::Structure::create(globalData, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount, &s_info); 63 } 64 world()65 DOMWrapperWorld* world() { return m_world.get(); } 66 67 private: 68 static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesVisitChildren | JSC::OverridesGetPropertyNames | Base::StructureFlags; 69 70 virtual void visitChildren(JSC::SlotVisitor&); 71 virtual JSC::UString className() const; 72 virtual bool getOwnPropertySlot(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertySlot&); 73 virtual bool getOwnPropertyDescriptor(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&); 74 virtual void put(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSValue, JSC::PutPropertySlot&); 75 virtual void putWithAttributes(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSValue, unsigned attributes); 76 virtual bool deleteProperty(JSC::ExecState*, const JSC::Identifier& propertyName); 77 virtual void getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties); 78 virtual void getOwnPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties); 79 virtual void defineGetter(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* getterFunction, unsigned attributes); 80 virtual void defineSetter(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, unsigned attributes); 81 virtual bool defineOwnProperty(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&, bool shouldThrow); 82 virtual JSC::JSValue lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName); 83 virtual JSC::JSValue lookupSetter(JSC::ExecState*, const JSC::Identifier& propertyName); 84 virtual JSC::JSObject* unwrappedObject(); 85 86 JSC::WriteBarrier<JSDOMWindow> m_window; 87 RefPtr<DOMWrapperWorld> m_world; 88 }; 89 90 JSC::JSValue toJS(JSC::ExecState*, Frame*); 91 JSDOMWindowShell* toJSDOMWindowShell(Frame*, DOMWrapperWorld*); 92 93 } // namespace WebCore 94 95 #endif // JSDOMWindowShell_h 96