09fe4bc4a880cfc60c782cd0e7ef324eb25bfba6
[WebKit.git] / WebCore / bindings / js / JSDOMWindowBase.h
1 /*
2  *  Copyright (C) 2000 Harri Porten (porten@kde.org)
3  *  Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reseved.
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free Software
17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19
20 #ifndef JSDOMWindowBase_h
21 #define JSDOMWindowBase_h
22
23 #include "PlatformString.h"
24 #include "JSDOMBinding.h"
25 #include <runtime/Protect.h>
26 #include <wtf/HashMap.h>
27 #include <wtf/OwnPtr.h>
28
29 namespace WebCore {
30
31     class AtomicString;
32     class DOMWindow;
33     class Event;
34     class Frame;
35     class JSDOMWindow;
36     class JSDOMWindowShell;
37     class JSLocation;
38     class JSEventListener;
39     class SecurityOrigin;
40
41     class JSDOMWindowBasePrivate;
42
43     class JSDOMWindowBase : public JSDOMGlobalObject {
44         typedef JSDOMGlobalObject Base;
45     protected:
46         JSDOMWindowBase(NonNullPassRefPtr<JSC::Structure>, PassRefPtr<DOMWindow>, JSDOMWindowShell*);
47
48     public:
49         void updateDocument();
50
51         DOMWindow* impl() const { return d()->impl.get(); }
52         virtual ScriptExecutionContext* scriptExecutionContext() const;
53
54         // Called just before removing this window from the JSDOMWindowShell.
55         void willRemoveFromWindowShell();
56
57         virtual const JSC::ClassInfo* classInfo() const { return &s_info; }
58         static const JSC::ClassInfo s_info;
59
60         virtual JSC::ExecState* globalExec();
61         virtual bool supportsProfiling() const;
62         virtual bool shouldInterruptScript() const;
63
64         bool allowsAccessFrom(JSC::ExecState*) const;
65         bool allowsAccessFromNoErrorMessage(JSC::ExecState*) const;
66         bool allowsAccessFrom(JSC::ExecState*, String& message) const;
67         void printErrorMessage(const String&) const;
68
69         // Don't call this version of allowsAccessFrom -- it's a slightly incorrect implementation used only by WebScriptObject
70         virtual bool allowsAccessFrom(const JSC::JSGlobalObject*) const;
71
72         virtual JSC::JSObject* toThisObject(JSC::ExecState*) const;
73         JSDOMWindowShell* shell() const;
74
75         static JSC::JSGlobalData* commonJSGlobalData();
76
77     private:
78         struct JSDOMWindowBaseData : public JSDOMGlobalObjectData {
79             JSDOMWindowBaseData(PassRefPtr<DOMWindow>, JSDOMWindowShell*);
80
81             RefPtr<DOMWindow> impl;
82             JSDOMWindowShell* shell;
83         };
84
85         bool allowsAccessFromPrivate(const JSC::JSGlobalObject*) const;
86         String crossDomainAccessErrorMessage(const JSC::JSGlobalObject*) const;
87         
88         JSDOMWindowBaseData* d() const { return static_cast<JSDOMWindowBaseData*>(JSC::JSVariableObject::d); }
89     };
90
91     // Returns a JSDOMWindow or jsNull()
92     // JSDOMGlobalObject* is ignored, accesing a window in any context will
93     // use that DOMWindow's prototype chain.
94     JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, DOMWindow*);
95     JSC::JSValue toJS(JSC::ExecState*, DOMWindow*);
96
97     // Returns JSDOMWindow or 0
98     JSDOMWindow* toJSDOMWindow(Frame*);
99     JSDOMWindow* toJSDOMWindow(JSC::JSValue);
100
101 } // namespace WebCore
102
103 #endif // JSDOMWindowBase_h