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 #include "JSDOMBinding.h" 34 35 namespace WebCore { 36 37 class DOMWindow; 38 class Frame; 39 40 class JSDOMWindowShell : public DOMObject { 41 typedef DOMObject Base; 42 public: 43 JSDOMWindowShell(PassRefPtr<DOMWindow>, DOMWrapperWorld* world); 44 virtual ~JSDOMWindowShell(); 45 window()46 JSDOMWindow* window() const { return m_window; } setWindow(JSDOMWindow * window)47 void setWindow(JSDOMWindow* window) 48 { 49 ASSERT_ARG(window, window); 50 m_window = window; 51 setPrototype(window->prototype()); 52 } 53 void setWindow(PassRefPtr<DOMWindow>); 54 55 static const JSC::ClassInfo s_info; 56 57 DOMWindow* impl() const; 58 59 void* operator new(size_t); 60 createStructure(JSC::JSValue prototype)61 static PassRefPtr<JSC::Structure> createStructure(JSC::JSValue prototype) 62 { 63 return JSC::Structure::create(prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), AnonymousSlotCount); 64 } 65 world()66 DOMWrapperWorld* world() { return m_world.get(); } 67 68 private: 69 static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesMarkChildren | JSC::OverridesGetPropertyNames | DOMObject::StructureFlags; 70 71 virtual void markChildren(JSC::MarkStack&); 72 virtual JSC::UString className() const; 73 virtual bool getOwnPropertySlot(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertySlot&); 74 virtual bool getOwnPropertyDescriptor(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&); 75 virtual void put(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSValue, JSC::PutPropertySlot&); 76 virtual void putWithAttributes(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSValue, unsigned attributes); 77 virtual bool deleteProperty(JSC::ExecState*, const JSC::Identifier& propertyName); 78 virtual void getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties); 79 virtual void getOwnPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties); 80 virtual void defineGetter(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* getterFunction, unsigned attributes); 81 virtual void defineSetter(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSObject* setterFunction, unsigned attributes); 82 virtual bool defineOwnProperty(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&, bool shouldThrow); 83 virtual JSC::JSValue lookupGetter(JSC::ExecState*, const JSC::Identifier& propertyName); 84 virtual JSC::JSValue lookupSetter(JSC::ExecState*, const JSC::Identifier& propertyName); 85 virtual JSC::JSObject* unwrappedObject(); classInfo()86 virtual const JSC::ClassInfo* classInfo() const { return &s_info; } 87 88 JSDOMWindow* m_window; 89 RefPtr<DOMWrapperWorld> m_world; 90 }; 91 92 JSC::JSValue toJS(JSC::ExecState*, Frame*); 93 JSDOMWindowShell* toJSDOMWindowShell(Frame*, DOMWrapperWorld*); 94 95 } // namespace WebCore 96 97 #endif // JSDOMWindowShell_h 98