2006-11-02 David Carson <dacarson@gmail.com>
[WebKit-https.git] / WebCore / page / FramePrivate.h
1 /* This file is part of the KDE project
2  *
3  * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
4  *                     1999-2001 Lars Knoll <knoll@kde.org>
5  *                     1999-2001 Antti Koivisto <koivisto@kde.org>
6  *                     2000-2001 Simon Hausmann <hausmann@kde.org>
7  *                     2000-2001 Dirk Mueller <mueller@kde.org>
8  *                     2000 Stefan Schimanski <1Stein@gmx.de>
9  * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
10  *
11  * This library is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Library General Public
13  * License as published by the Free Software Foundation; either
14  * version 2 of the License, or (at your option) any later version.
15  *
16  * This library is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Library General Public License for more details.
20  *
21  * You should have received a copy of the GNU Library General Public License
22  * along with this library; see the file COPYING.LIB.  If not, write to
23  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24  * Boston, MA 02111-1307, USA.
25  */
26
27 #ifndef FramePrivate_h
28 #define FramePrivate_h
29
30 #include "CSSMutableStyleDeclaration.h"
31 #include "CachePolicy.h"
32 #include "CommandByName.h"
33 #include "DOMWindow.h"
34 #include "TextResourceDecoder.h"
35 #include "EditCommand.h"
36 #include "Editor.h"
37 #include "EditorClient.h"
38 #include "FormData.h"
39 #include "Frame.h"
40 #include "FrameLoader.h"
41 #include "FrameTree.h"
42 #include "IconLoader.h"
43 #include "SelectionController.h"
44 #include "StringHash.h"
45 #include "Timer.h"
46 #include "kjs_proxy.h"
47 #include <wtf/HashMap.h>
48
49 namespace WebCore {
50
51     class TextResourceDecoder;
52     class UserStyleSheetLoader;
53
54     enum RedirectionScheduled {
55         noRedirectionScheduled,
56         redirectionScheduled,
57         locationChangeScheduled,
58         historyNavigationScheduled,
59         locationChangeScheduledDuringLoad
60     };
61     
62     class FramePrivate {
63     public:
64         FramePrivate(Page* page, Frame* parent, Frame* thisFrame, Element* ownerElement, PassRefPtr<EditorClient> client)
65             : m_page(page)
66             , m_treeNode(thisFrame, parent)
67             , m_ownerElement(ownerElement)
68             , m_jscript(0)
69             , m_runningScripts(0)
70             , m_bJScriptEnabled(true)
71             , m_bJavaEnabled(true)
72             , m_bPluginsEnabled(true)
73             , m_settings(0)
74             , m_bComplete(true)
75             , m_bLoadingMainResource(false)
76             , m_bLoadEventEmitted(true)
77             , m_bUnloadEventEmitted(true)
78             , m_haveEncoding(false)
79             , m_bHTTPRefresh(false)
80             , m_redirectLockHistory(false)
81             , m_redirectUserGesture(false)
82             , m_cachePolicy(CachePolicyVerify)
83             , m_redirectionTimer(thisFrame, &Frame::redirectionTimerFired)
84             , m_scheduledRedirection(noRedirectionScheduled)
85             , m_delayRedirect(0)
86             , m_zoomFactor(parent ? parent->d->m_zoomFactor : 100)
87             , m_submitForm(0)
88             , m_bMousePressed(false)
89             , m_selectionController(thisFrame)
90             , m_caretBlinkTimer(thisFrame, &Frame::caretBlinkTimerFired)
91             , m_editor(thisFrame, client)
92             , m_command(thisFrame)
93             , m_caretVisible(false)
94             , m_caretPaint(true)
95             , m_bFirstData(true)
96             , m_bCleared(true)
97             , m_isActive(false)
98             , m_opener(0)
99             , m_openedByJS(false)
100             , m_bPendingChildRedirection(false)
101             , m_executingJavaScriptFormAction(false)
102             , m_cancelWithLoadInProgress(false)
103             , m_lifeSupportTimer(thisFrame, &Frame::lifeSupportTimerFired)
104             , m_loader(new FrameLoader(thisFrame))
105             , m_userStyleSheetLoader(0)
106             , m_iconLoader(0)
107             , m_autoscrollTimer(thisFrame, &Frame::autoscrollTimerFired)
108             , m_autoscrollRenderer(0)
109             , m_mouseDownMayStartAutoscroll(false)
110             , m_mouseDownMayStartDrag(false)
111             , m_paintRestriction(PaintRestrictionNone)
112             , m_markedTextUsesUnderlines(false)
113             , m_highlightTextMatches(false)
114             , m_windowHasFocus(false)
115             , m_inViewSourceMode(false)
116             , frameCount(0)
117             , m_prohibitsScrolling(false)
118             , m_beganSelectingText(false)
119         {
120         }
121
122         ~FramePrivate()
123         {
124             delete m_jscript;
125             delete m_loader;
126             delete m_iconLoader;
127         }
128
129         Page* m_page;
130         FrameTree m_treeNode;
131         RefPtr<DOMWindow> m_domWindow;
132
133         Vector<RefPtr<Plugin> > m_plugins;
134
135         Element* m_ownerElement;
136         RefPtr<FrameView> m_view;
137         RefPtr<Document> m_doc;
138         RefPtr<TextResourceDecoder> m_decoder;
139         String m_encoding;
140         String scheduledScript;
141         RefPtr<Node> scheduledScriptNode;
142
143         KJSProxy* m_jscript;
144         int m_runningScripts;
145         bool m_bJScriptEnabled : 1;
146         bool m_bJavaEnabled : 1;
147         bool m_bPluginsEnabled : 1;
148
149         Settings* m_settings;
150
151         HashMap<String, String> m_metaData;
152
153         String m_kjsStatusBarText;
154         String m_kjsDefaultStatusBarText;
155         String m_lastModified;
156
157         bool m_bComplete : 1;
158         bool m_bLoadingMainResource : 1;
159         bool m_bLoadEventEmitted : 1;
160         bool m_bUnloadEventEmitted : 1;
161         bool m_haveEncoding : 1;
162         bool m_bHTTPRefresh : 1;
163         bool m_redirectLockHistory : 1;
164         bool m_redirectUserGesture : 1;
165
166         KURL m_url;
167         KURL m_workingURL;
168
169         String m_responseMIMEType;
170
171         CachePolicy m_cachePolicy;
172         Timer<Frame> m_redirectionTimer;
173
174         RedirectionScheduled m_scheduledRedirection;
175         double m_delayRedirect;
176         DeprecatedString m_redirectURL;
177         String m_redirectReferrer;
178         int m_scheduledHistoryNavigationSteps;
179
180         int m_zoomFactor;
181
182         String m_referrer;
183
184         struct SubmitForm {
185             const char* submitAction;
186             String submitUrl;
187             FormData submitFormData;
188             String target;
189             String submitContentType;
190             String submitBoundary;
191         };
192         SubmitForm* m_submitForm;
193
194         bool m_bMousePressed;
195         RefPtr<Node> m_mousePressNode; // node under the mouse when the mouse was pressed (set in the mouse handler)
196
197         TextGranularity m_selectionGranularity;
198         bool m_beganSelectingText;
199
200         SelectionController m_selectionController;
201         Selection m_mark;
202         Timer<Frame> m_caretBlinkTimer;
203         Editor m_editor;
204         CommandByName m_command;
205
206         bool m_caretVisible : 1;
207         bool m_caretPaint : 1;
208         bool m_bFirstData : 1;
209         bool m_bCleared : 1;
210         bool m_isActive : 1;
211
212         int m_xPosForVerticalArrowNavigation;
213         RefPtr<CSSMutableStyleDeclaration> m_typingStyle;
214
215         IntPoint m_dragStartPos;
216
217         Frame* m_opener;
218         HashSet<Frame*> m_openedFrames;
219         bool m_openedByJS;
220         bool m_bPendingChildRedirection;
221         bool m_executingJavaScriptFormAction;
222         bool m_cancelWithLoadInProgress;
223
224         Timer<Frame> m_lifeSupportTimer;
225
226         FrameLoader* m_loader;
227         UserStyleSheetLoader* m_userStyleSheetLoader;
228         IconLoader* m_iconLoader;
229         
230         Timer<Frame> m_autoscrollTimer;
231         RenderObject* m_autoscrollRenderer;
232         bool m_mouseDownMayStartAutoscroll;
233         bool m_mouseDownMayStartDrag;
234         
235         RefPtr<Node> m_elementToDraw;
236         PaintRestriction m_paintRestriction;
237         
238         HashMap<String, String> m_formValuesAboutToBeSubmitted;
239         RefPtr<Element> m_formAboutToBeSubmitted;
240         KURL m_submittedFormURL;
241         
242         bool m_markedTextUsesUnderlines;
243         Vector<MarkedTextUnderline> m_markedTextUnderlines;
244         bool m_highlightTextMatches;
245         bool m_windowHasFocus;
246         
247         bool m_inViewSourceMode;
248
249         unsigned frameCount;
250
251         bool m_prohibitsScrolling;
252     };
253 }
254
255 #endif