WebCore/bindings/js/JSDOMWindowBase.h
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebCore/bindings/js/JSDOMWindowBase.h	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,106 @@
+/*
+ *  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 <runtime/Protect.h>
+#include <wtf/HashMap.h>
+#include <wtf/OwnPtr.h>
+
+namespace WebCore {
+
+    class AtomicString;
+    class DOMWindow;
+    class Event;
+    class Frame;
+    class DOMWrapperWorld;
+    class JSDOMWindow;
+    class JSDOMWindowShell;
+    class JSLocation;
+    class JSEventListener;
+    class SecurityOrigin;
+
+    class JSDOMWindowBasePrivate;
+
+    class JSDOMWindowBase : public JSDOMGlobalObject {
+        typedef JSDOMGlobalObject Base;
+    protected:
+        JSDOMWindowBase(NonNullPassRefPtr<JSC::Structure>, PassRefPtr<DOMWindow>, JSDOMWindowShell*);
+
+    public:
+        void updateDocument();
+
+        DOMWindow* impl() const { return d()->impl.get(); }
+        virtual ScriptExecutionContext* scriptExecutionContext() const;
+
+        // Called just before removing this window from the JSDOMWindowShell.
+        void willRemoveFromWindowShell();
+
+        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();
+
+    private:
+        struct JSDOMWindowBaseData : public JSDOMGlobalObjectData {
+            JSDOMWindowBaseData(PassRefPtr<DOMWindow> window, JSDOMWindowShell* shell);
+
+            RefPtr<DOMWindow> impl;
+            JSDOMWindowShell* shell;
+        };
+
+        bool allowsAccessFromPrivate(const JSC::JSGlobalObject*) const;
+        String crossDomainAccessErrorMessage(const JSC::JSGlobalObject*) const;
+        
+        static void destroyJSDOMWindowBaseData(void*);
+
+        JSDOMWindowBaseData* d() const { return static_cast<JSDOMWindowBaseData*>(JSC::JSVariableObject::d); }
+    };
+
+    // Returns a JSDOMWindow or jsNull()
+    // JSDOMGlobalObject* is ignored, accessing a window in any context will
+    // use that DOMWindow's prototype chain.
+    JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, DOMWindow*);
+    JSC::JSValue toJS(JSC::ExecState*, DOMWindow*);
+
+    // Returns JSDOMWindow or 0
+    JSDOMWindow* toJSDOMWindow(Frame*, DOMWrapperWorld*);
+    JSDOMWindow* toJSDOMWindow(JSC::JSValue);
+
+} // namespace WebCore
+
+#endif // JSDOMWindowBase_h