WebCore:
[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 "Decoder.h"
35 #include "EditCommand.h"
36 #include "Frame.h"
37 #include "FrameTree.h"
38 #include "loader/icon/IconLoader.h"
39 #include "SelectionController.h"
40 #include "StringHash.h"
41 #include "Timer.h"
42 #include "kjs_proxy.h"
43 #include <wtf/HashMap.h>
44
45 namespace WebCore {
46
47     class Decoder;
48     class UserStyleSheetLoader;
49     class IconLoader;
50
51     enum RedirectionScheduled {
52         noRedirectionScheduled,
53         redirectionScheduled,
54         locationChangeScheduled,
55         historyNavigationScheduled,
56         locationChangeScheduledDuringLoad
57     };
58     
59     class FramePrivate {
60     public:
61         FramePrivate(Page* page, Frame* parent, Frame* thisFrame, Element* ownerElement)
62             : m_page(page)
63             , m_treeNode(thisFrame, parent)
64             , m_ownerElement(ownerElement)
65             , m_extension(0)
66             , m_jscript(0)
67             , m_runningScripts(0)
68             , m_bJScriptEnabled(true)
69             , m_bJavaEnabled(true)
70             , m_bPluginsEnabled(true)
71             , m_settings(0)
72             , m_bComplete(true)
73             , m_bLoadingMainResource(false)
74             , m_bLoadEventEmitted(true)
75             , m_bUnloadEventEmitted(true)
76             , m_haveEncoding(false)
77             , m_bHTTPRefresh(false)
78             , m_redirectLockHistory(false)
79             , m_redirectUserGesture(false)
80             , m_cachePolicy(CachePolicyVerify)
81             , m_redirectionTimer(thisFrame, &Frame::redirectionTimerFired)
82             , m_scheduledRedirection(noRedirectionScheduled)
83             , m_delayRedirect(0)
84             , m_zoomFactor(parent ? parent->d->m_zoomFactor : 100)
85             , m_submitForm(0)
86             , m_bMousePressed(false)
87             , m_selectionController(thisFrame)
88             , m_caretBlinkTimer(thisFrame, &Frame::caretBlinkTimerFired)
89             , m_command(thisFrame)
90             , m_caretVisible(false)
91             , m_caretPaint(true)
92             , m_bFirstData(true)
93             , m_bCleared(true)
94             , m_isActive(false)
95             , m_opener(0)
96             , m_openedByJS(false)
97             , m_bPendingChildRedirection(false)
98             , m_executingJavaScriptFormAction(false)
99             , m_cancelWithLoadInProgress(false)
100             , m_lifeSupportTimer(thisFrame, &Frame::lifeSupportTimerFired)
101             , m_userStyleSheetLoader(0)
102             , m_iconLoader(0)
103             , m_autoscrollTimer(thisFrame, &Frame::autoscrollTimerFired)
104             , m_autoscrollRenderer(0)
105             , m_mouseDownMayStartAutoscroll(false)
106             , m_mouseDownMayStartDrag(false)
107             , m_paintRestriction(PaintRestrictionNone)
108             , m_markedTextUsesUnderlines(false)
109             , m_highlightTextMatches(false)
110             , m_windowHasFocus(false)
111             , m_inViewSourceMode(false)
112             , frameCount(0)
113             , m_prohibitsScrolling(false)
114         {
115         }
116
117         ~FramePrivate()
118         {
119             delete m_extension;
120             delete m_jscript;
121             delete m_iconLoader;
122         }
123
124         Page* m_page;
125         FrameTree m_treeNode;
126         RefPtr<DOMWindow> m_domWindow;
127
128         Vector<RefPtr<Plugin> > m_plugins;
129
130         Element* m_ownerElement;
131         RefPtr<FrameView> m_view;
132         BrowserExtension* m_extension;
133         RefPtr<Document> m_doc;
134         RefPtr<Decoder> m_decoder;
135         String m_encoding;
136         String scheduledScript;
137         RefPtr<Node> scheduledScriptNode;
138
139         KJSProxy* m_jscript;
140         int m_runningScripts;
141         bool m_bJScriptEnabled : 1;
142         bool m_bJavaEnabled : 1;
143         bool m_bPluginsEnabled : 1;
144
145         Settings* m_settings;
146
147         HashMap<String, String> m_metaData;
148
149         String m_kjsStatusBarText;
150         String m_kjsDefaultStatusBarText;
151         String m_lastModified;
152
153         bool m_bComplete : 1;
154         bool m_bLoadingMainResource : 1;
155         bool m_bLoadEventEmitted : 1;
156         bool m_bUnloadEventEmitted : 1;
157         bool m_haveEncoding : 1;
158         bool m_bHTTPRefresh : 1;
159         bool m_redirectLockHistory : 1;
160         bool m_redirectUserGesture : 1;
161
162         KURL m_url;
163         KURL m_workingURL;
164         ResourceRequest m_request;
165
166         CachePolicy m_cachePolicy;
167         Timer<Frame> m_redirectionTimer;
168
169         RedirectionScheduled m_scheduledRedirection;
170         double m_delayRedirect;
171         DeprecatedString m_redirectURL;
172         String m_redirectReferrer;
173         int m_scheduledHistoryNavigationSteps;
174
175         int m_zoomFactor;
176
177         String m_referrer;
178
179         struct SubmitForm {
180             const char* submitAction;
181             String submitUrl;
182             FormData submitFormData;
183             String target;
184             String submitContentType;
185             String submitBoundary;
186         };
187         SubmitForm* m_submitForm;
188
189         bool m_bMousePressed;
190         RefPtr<Node> m_mousePressNode; // node under the mouse when the mouse was pressed (set in the mouse handler)
191
192         TextGranularity m_selectionGranularity;
193         bool m_beganSelectingText;
194
195         SelectionController m_selectionController;
196         Selection m_mark;
197         Timer<Frame> m_caretBlinkTimer;
198
199         CommandByName m_command;
200
201         bool m_caretVisible : 1;
202         bool m_caretPaint : 1;
203         bool m_bFirstData : 1;
204         bool m_bCleared : 1;
205         bool m_isActive : 1;
206
207         RefPtr<EditCommand> m_lastEditCommand;
208         int m_xPosForVerticalArrowNavigation;
209         RefPtr<CSSMutableStyleDeclaration> m_typingStyle;
210
211         IntPoint m_dragStartPos;
212
213         Frame* m_opener;
214         HashSet<Frame*> m_openedFrames;
215         bool m_openedByJS;
216         bool m_bPendingChildRedirection;
217         bool m_executingJavaScriptFormAction;
218         bool m_cancelWithLoadInProgress;
219
220         Timer<Frame> m_lifeSupportTimer;
221
222         UserStyleSheetLoader* m_userStyleSheetLoader;
223         IconLoader* m_iconLoader;
224         
225         Timer<Frame> m_autoscrollTimer;
226         RenderObject* m_autoscrollRenderer;
227         bool m_mouseDownMayStartAutoscroll;
228         bool m_mouseDownMayStartDrag;
229         
230         RefPtr<Node> m_elementToDraw;
231         PaintRestriction m_paintRestriction;
232         
233         HashMap<String, String> m_formValuesAboutToBeSubmitted;
234         RefPtr<Element> m_formAboutToBeSubmitted;
235         KURL m_submittedFormURL;
236         
237         bool m_markedTextUsesUnderlines;
238         Vector<MarkedTextUnderline> m_markedTextUnderlines;
239         bool m_highlightTextMatches;
240         bool m_windowHasFocus;
241         
242         bool m_inViewSourceMode;
243
244         unsigned frameCount;
245
246         bool m_prohibitsScrolling;
247     };
248 }
249
250 #endif