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