summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/js/kjs_window.h
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/js/kjs_window.h')
-rw-r--r--WebCore/bindings/js/kjs_window.h191
1 files changed, 191 insertions, 0 deletions
diff --git a/WebCore/bindings/js/kjs_window.h b/WebCore/bindings/js/kjs_window.h
new file mode 100644
index 0000000..ad415aa
--- /dev/null
+++ b/WebCore/bindings/js/kjs_window.h
@@ -0,0 +1,191 @@
+/*
+ * 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 kjs_window_h
+#define kjs_window_h
+
+#include "PlatformString.h"
+#include "kjs_binding.h"
+#include <kjs/protect.h>
+#include "SecurityOrigin.h"
+#include <wtf/HashMap.h>
+#include <wtf/Noncopyable.h>
+#include <wtf/OwnPtr.h>
+
+namespace WebCore {
+ class AtomicString;
+ class DOMWindow;
+ class Frame;
+ class JSEventListener;
+ class JSLocation;
+ class JSUnprotectedEventListener;
+ class PausedTimeouts;
+ class ScheduledAction;
+}
+
+namespace KJS {
+
+ class DOMWindowTimer;
+ class WindowPrivate;
+
+ // This is the only WebCore JS binding which does not inherit from DOMObject
+ class Window : public JSGlobalObject {
+ typedef JSGlobalObject Base;
+
+ friend class WebCore::ScheduledAction;
+ protected:
+ Window(JSObject* prototype, WebCore::DOMWindow*);
+
+ public:
+ virtual ~Window();
+
+ WebCore::DOMWindow* impl() const { return m_impl.get(); }
+
+ void disconnectFrame();
+
+ // Returns and registers a window object. In case there's already a Window
+ // for the specified frame p this will be returned in order to have unique
+ // bindings.
+ static JSValue* retrieve(WebCore::Frame*);
+
+ // Returns the Window object for a given HTML frame
+ static Window* retrieveWindow(WebCore::Frame*);
+
+ // Returns a pointer to the Window object this javascript interpreting instance
+ // was called from.
+ static Window* retrieveActive(ExecState*);
+
+ virtual void mark();
+
+ virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
+ JSValue* getValueProperty(ExecState*, int token) const;
+ virtual void put(ExecState*, const Identifier& propertyName, JSValue*);
+
+ int installTimeout(const UString& handler, int t, bool singleShot);
+ int installTimeout(JSValue* function, const List& args, int t, bool singleShot);
+ void clearTimeout(int timerId, bool delAction = true);
+ WebCore::PausedTimeouts* pauseTimeouts();
+ void resumeTimeouts(WebCore::PausedTimeouts*);
+
+ void timerFired(DOMWindowTimer*);
+
+ WebCore::JSLocation* location() const;
+
+ // Finds a wrapper of a JS EventListener, returns 0 if no existing one.
+ WebCore::JSEventListener* findJSEventListener(JSValue*, bool html = false);
+
+ // Finds or creates a wrapper of a JS EventListener. JS EventListener object is GC-protected.
+ WebCore::JSEventListener *findOrCreateJSEventListener(JSValue*, bool html = false);
+
+ // Finds a wrapper of a GC-unprotected JS EventListener, returns 0 if no existing one.
+ WebCore::JSUnprotectedEventListener* findJSUnprotectedEventListener(JSValue*, bool html = false);
+
+ // Finds or creates a wrapper of a JS EventListener. JS EventListener object is *NOT* GC-protected.
+ WebCore::JSUnprotectedEventListener *findOrCreateJSUnprotectedEventListener(JSValue*, bool html = false);
+
+ void clear();
+
+ void setCurrentEvent(WebCore::Event*);
+ WebCore::Event* currentEvent();
+
+ // Set a place to put a dialog return value when the window is cleared.
+ void setReturnValueSlot(JSValue** slot);
+
+ typedef HashMap<JSObject*, WebCore::JSEventListener*> ListenersMap;
+ typedef HashMap<JSObject*, WebCore::JSUnprotectedEventListener*> UnprotectedListenersMap;
+
+ ListenersMap& jsEventListeners();
+ ListenersMap& jsHTMLEventListeners();
+ UnprotectedListenersMap& jsUnprotectedEventListeners();
+ UnprotectedListenersMap& jsUnprotectedHTMLEventListeners();
+
+ virtual const ClassInfo* classInfo() const { return &info; }
+ static const ClassInfo info;
+
+ virtual ExecState* globalExec();
+
+ virtual bool shouldInterruptScript() const;
+
+ bool allowsAccessFrom(ExecState*) const;
+ bool allowsAccessFromNoErrorMessage(ExecState*) const;
+ bool allowsAccessFrom(ExecState*, WebCore::String& message) const;
+
+ void printErrorMessage(const WebCore::String&) const;
+
+ // Don't call this version of allowsAccessFrom -- it's a slightly incorrect implementation used only by WebScriptObject
+ virtual bool allowsAccessFrom(const JSGlobalObject*) const;
+
+ enum {
+ // Attributes
+ Crypto, Event_, Location_, Navigator_,
+ ClientInformation,
+
+ // Event Listeners
+ Onabort, Onblur, Onchange, Onclick,
+ Ondblclick, Onerror, Onfocus, Onkeydown,
+ Onkeypress, Onkeyup, Onload, Onmousedown,
+ Onmousemove, Onmouseout, Onmouseover, Onmouseup,
+ OnWindowMouseWheel, Onreset, Onresize, Onscroll,
+ Onsearch, Onselect, Onsubmit, Onunload,
+ Onbeforeunload,
+
+ // Constructors
+ DOMException, Audio, Image, Option, XMLHttpRequest,
+ XSLTProcessor_
+ };
+
+ private:
+ JSValue* getListener(ExecState*, const WebCore::AtomicString& eventType) const;
+ void setListener(ExecState*, const WebCore::AtomicString& eventType, JSValue* func);
+
+ static JSValue* childFrameGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
+ static JSValue* indexGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
+ static JSValue* namedItemGetter(ExecState*, JSObject*, const Identifier&, const PropertySlot&);
+
+ void clearHelperObjectProperties();
+ void clearAllTimeouts();
+ int installTimeout(WebCore::ScheduledAction*, int interval, bool singleShot);
+
+ bool allowsAccessFromPrivate(const JSGlobalObject*, WebCore::SecurityOrigin::Reason&) const;
+ bool allowsAccessFromPrivate(const ExecState*, WebCore::SecurityOrigin::Reason&) const;
+ WebCore::String crossDomainAccessErrorMessage(const JSGlobalObject*, WebCore::SecurityOrigin::Reason) const;
+
+ RefPtr<WebCore::DOMWindow> m_impl;
+ OwnPtr<WindowPrivate> d;
+ };
+
+ // Functions
+ JSValue* windowProtoFuncAToB(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncBToA(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncOpen(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncSetTimeout(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncClearTimeout(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncSetInterval(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncAddEventListener(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncRemoveEventListener(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncShowModalDialog(ExecState*, JSObject*, const List&);
+ JSValue* windowProtoFuncNotImplemented(ExecState*, JSObject*, const List&);
+
+} // namespace KJS
+
+namespace WebCore {
+ KJS::JSValue* toJS(KJS::ExecState*, DOMWindow*);
+} // namespace WebCore
+
+#endif // kjs_window_h