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