diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:52 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:52 -0800 |
commit | 8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (patch) | |
tree | 11425ea0b299d6fb89c6d3618a22d97d5bf68d0f /WebCore/bindings/js/JSDOMWindowBase.h | |
parent | 648161bb0edfc3d43db63caed5cc5213bc6cb78f (diff) | |
download | external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.zip external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.gz external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'WebCore/bindings/js/JSDOMWindowBase.h')
-rw-r--r-- | WebCore/bindings/js/JSDOMWindowBase.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/WebCore/bindings/js/JSDOMWindowBase.h b/WebCore/bindings/js/JSDOMWindowBase.h new file mode 100644 index 0000000..f345f47 --- /dev/null +++ b/WebCore/bindings/js/JSDOMWindowBase.h @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2000 Harri Porten (porten@kde.org) + * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reseved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef JSDOMWindowBase_h +#define JSDOMWindowBase_h + +#include "PlatformString.h" +#include "JSDOMBinding.h" +#include <kjs/protect.h> +#include <wtf/HashMap.h> +#include <wtf/OwnPtr.h> + +namespace WebCore { + + class AtomicString; + class DOMWindow; + class DOMWindowTimer; + class Event; + class Frame; + class JSDOMWindow; + class JSDOMWindowShell; + class JSEventListener; + class JSLocation; + class JSUnprotectedEventListener; + class PausedTimeouts; + class ScheduledAction; + class SecurityOrigin; + + class JSDOMWindowBasePrivate; + + // This is the only WebCore JS binding which does not inherit from DOMObject + class JSDOMWindowBase : public JSDOMGlobalObject { + typedef JSDOMGlobalObject Base; + + friend class ScheduledAction; + protected: + JSDOMWindowBase(PassRefPtr<JSC::StructureID>, PassRefPtr<DOMWindow>, JSDOMWindowShell*); + + public: + virtual ~JSDOMWindowBase(); + + void updateDocument(); + + DOMWindow* impl() const { return d()->impl.get(); } + virtual ScriptExecutionContext* scriptExecutionContext() const; + + void disconnectFrame(); + + virtual void markCrossHeapDependentObjects(); + + virtual bool getOwnPropertySlot(JSC::ExecState*, const JSC::Identifier&, JSC::PropertySlot&); + virtual void put(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSValue*, JSC::PutPropertySlot&); + + int installTimeout(const JSC::UString& handler, int t, bool singleShot); + int installTimeout(JSC::ExecState*, JSC::JSValue* function, const JSC::ArgList& args, int t, bool singleShot); + void removeTimeout(int timerId, bool delAction = true); + + void pauseTimeouts(OwnPtr<PausedTimeouts>&); + void resumeTimeouts(OwnPtr<PausedTimeouts>&); + + void timerFired(DOMWindowTimer*); + + void clear(); + + // Set a place to put a dialog return value when the window is cleared. + void setReturnValueSlot(JSC::JSValue** slot); + + virtual const JSC::ClassInfo* classInfo() const { return &s_info; } + static const JSC::ClassInfo s_info; + + virtual JSC::ExecState* globalExec(); + + virtual bool supportsProfiling() const; + + virtual bool shouldInterruptScript() const; + + bool allowsAccessFrom(JSC::ExecState*) const; + bool allowsAccessFromNoErrorMessage(JSC::ExecState*) const; + bool allowsAccessFrom(JSC::ExecState*, String& message) const; + + void printErrorMessage(const String&) const; + + // Don't call this version of allowsAccessFrom -- it's a slightly incorrect implementation used only by WebScriptObject + virtual bool allowsAccessFrom(const JSC::JSGlobalObject*) const; + + virtual JSC::JSObject* toThisObject(JSC::ExecState*) const; + JSDOMWindowShell* shell() const; + + static JSC::JSGlobalData* commonJSGlobalData(); + + void clearAllTimeouts(); + + private: + struct JSDOMWindowBaseData : public JSDOMGlobalObjectData { + JSDOMWindowBaseData(PassRefPtr<DOMWindow>, JSDOMWindowShell*); + + RefPtr<DOMWindow> impl; + + JSC::JSValue** returnValueSlot; + JSDOMWindowShell* shell; + + typedef HashMap<int, DOMWindowTimer*> TimeoutsMap; + TimeoutsMap timeouts; + }; + + static JSC::JSValue* childFrameGetter(JSC::ExecState*, const JSC::Identifier&, const JSC::PropertySlot&); + static JSC::JSValue* indexGetter(JSC::ExecState*, const JSC::Identifier&, const JSC::PropertySlot&); + static JSC::JSValue* namedItemGetter(JSC::ExecState*, const JSC::Identifier&, const JSC::PropertySlot&); + + void clearHelperObjectProperties(); + int installTimeout(ScheduledAction*, int interval, bool singleShot); + + bool allowsAccessFromPrivate(const JSC::JSGlobalObject*) const; + String crossDomainAccessErrorMessage(const JSC::JSGlobalObject*) const; + + JSDOMWindowBaseData* d() const { return static_cast<JSDOMWindowBaseData*>(JSC::JSVariableObject::d); } + }; + + // Returns a JSDOMWindow or jsNull() + JSC::JSValue* toJS(JSC::ExecState*, DOMWindow*); + + // Returns JSDOMWindow or 0 + JSDOMWindow* toJSDOMWindow(Frame*); + JSDOMWindow* toJSDOMWindow(JSC::JSValue*); + +} // namespace WebCore + +#endif // JSDOMWindowBase_h |