1 /* This file is part of the KDE project
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 Apple Computer, Inc.
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.
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.
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.
31 #include <klibloader.h>
32 #include <kxmlguifactory.h>
34 #include <kparts/partmanager.h>
36 #include "khtml_run.h"
37 #include "khtml_find.h"
38 #include "khtml_factory.h"
39 #include "khtml_events.h"
40 #include "khtml_ext.h"
41 #include "khtml_iface.h"
42 #include "khtml_settings.h"
43 #include "misc/decoder.h"
44 #include "misc/formdata.h"
45 #include "java/kjavaappletcontext.h"
46 #include "ecma/kjs_proxy.h"
47 #include "css/css_valueimpl.h"
48 #include "dom/dom_misc.h"
49 #include "editing/htmlediting.h"
50 #include "editing/selection.h"
62 enum Type { Frame, IFrame, Object };
64 ChildFrame() { m_bCompleted = false; m_bPreloaded = false; m_type = Frame; m_bNotify = false; }
67 ~ChildFrame() { if (m_run) m_run->abort(); }
70 QGuardedPtr<khtml::RenderPart> m_frame;
71 QGuardedPtr<KParts::ReadOnlyPart> m_part;
72 QGuardedPtr<KParts::BrowserExtension> m_extension;
73 QString m_serviceName;
74 QString m_serviceType;
75 QStringList m_services;
78 KParts::URLArgs m_args;
80 QGuardedPtr<KHTMLRun> m_run;
85 QStringList m_paramNames;
86 QStringList m_paramValues;
91 class FrameList : public QValueList<khtml::ChildFrame>
94 Iterator find( const QString &name );
97 typedef FrameList::ConstIterator ConstFrameIt;
98 typedef FrameList::Iterator FrameIt;
100 static int khtml_part_dcop_counter = 0;
102 enum RedirectionScheduled {
103 noRedirectionScheduled,
104 redirectionScheduled,
105 locationChangeScheduled,
106 historyNavigationScheduled,
107 locationChangeScheduledDuringLoad
110 class KHTMLPartPrivate
113 KHTMLPartPrivate(QObject* parent)
118 m_runningScripts = 0;
122 m_bLoadEventEmitted = true;
123 m_bUnloadEventEmitted = true;
124 m_cachePolicy = KIO::CC_Verify;
127 m_settings = new KHTMLSettings(*KHTMLFactory::defaultHTMLSettings());
134 m_linkCursor = KCursor::handCursor();
136 m_totalObjectCount = 0;
139 m_haveEncoding = false;
143 m_ssl_in_use = false;
153 m_focusNodeNumber = -1;
154 m_focusNodeRestored = false;
156 m_bJScriptForce = false;
157 m_bJScriptOverride = false;
158 m_bJavaForce = false;
159 m_bJavaOverride = false;
160 m_bPluginsForce = false;
161 m_bPluginsOverride = false;
162 m_onlyLocalReferences = false;
164 m_caretBlinkTimer = 0;
165 m_caretVisible = false;
166 m_caretBlinks = true;
171 m_metaRefreshEnabled = true;
172 m_bHTTPRefresh = false;
176 m_scheduledRedirection = noRedirectionScheduled;
179 m_bPendingChildRedirection = false;
180 m_executingJavaScriptFormAction = false;
182 m_cancelWithLoadInProgress = false;
184 // inherit settings from parent
185 if(parent && parent->inherits("KHTMLPart"))
187 KHTMLPart* part = static_cast<KHTMLPart*>(parent);
190 m_bJScriptForce = part->d->m_bJScriptForce;
191 m_bJScriptOverride = part->d->m_bJScriptOverride;
192 m_bJavaForce = part->d->m_bJavaForce;
193 m_bJavaOverride = part->d->m_bJavaOverride;
194 m_bPluginsForce = part->d->m_bPluginsForce;
195 m_bPluginsOverride = part->d->m_bPluginsOverride;
196 // Same for SSL settings
198 m_ssl_in_use = part->d->m_ssl_in_use;
200 m_onlyLocalReferences = part->d->m_onlyLocalReferences;
201 m_zoomFactor = part->d->m_zoomFactor;
206 m_focusNodeNumber = -1;
207 m_focusNodeRestored = false;
209 m_openedByJS = false;
210 m_newJSInterpreterExists = false;
212 m_dcop_counter = ++khtml_part_dcop_counter;
225 delete m_javaContext;
228 m_typingStyle->deref();
232 QValueList<khtml::ChildFrame> m_objects;
234 QGuardedPtr<KHTMLView> m_view;
235 KHTMLPartBrowserExtension *m_extension;
236 KHTMLPartBrowserHostExtension *m_hostExtension;
237 DOM::DocumentImpl *m_doc;
238 khtml::Decoder *m_decoder;
242 QString scheduledScript;
243 DOM::Node scheduledScriptNode;
247 int m_runningScripts;
248 bool m_bJScriptEnabled :1;
249 bool m_bJScriptDebugEnabled :1;
250 bool m_bJavaEnabled :1;
251 bool m_bPluginsEnabled :1;
252 bool m_bJScriptForce :1;
253 bool m_bJScriptOverride :1;
254 bool m_bJavaForce :1;
255 bool m_bJavaOverride :1;
256 bool m_bPluginsForce :1;
257 bool m_metaRefreshEnabled :1;
258 bool m_bPluginsOverride :1;
262 DCOPObject *m_dcopobject;
265 KJavaAppletContext *m_javaContext;
268 KHTMLSettings *m_settings;
270 KIO::TransferJob * m_job;
272 QString m_kjsStatusBarText;
273 QString m_kjsDefaultStatusBarText;
274 QString m_lastModified;
277 // QStrings for SSL metadata
278 // Note: When adding new variables don't forget to update ::saveState()/::restoreState()!
280 QString m_ssl_peer_certificate,
285 m_ssl_cipher_version,
286 m_ssl_cipher_used_bits,
292 bool m_bLoadEventEmitted:1;
293 bool m_bUnloadEventEmitted:1;
294 bool m_haveEncoding:1;
295 bool m_bHTTPRefresh:1;
296 bool m_onlyLocalReferences :1;
297 bool m_redirectLockHistory:1;
298 bool m_redirectUserGesture:1;
302 KIO::CacheControl m_cachePolicy;
303 QTimer m_redirectionTimer;
306 RedirectionScheduled m_scheduledRedirection;
307 double m_delayRedirect;
308 QString m_redirectURL;
309 int m_scheduledHistoryNavigationSteps;
312 KAction *m_paViewDocument;
313 KAction *m_paViewFrame;
314 KAction *m_paSaveBackground;
315 KAction *m_paSaveDocument;
316 KAction *m_paSaveFrame;
317 KAction *m_paSecurity;
318 KSelectAction *m_paSetEncoding;
319 KSelectAction *m_paUseStylesheet;
320 KHTMLZoomFactorAction *m_paIncZoomFactor;
321 KHTMLZoomFactorAction *m_paDecZoomFactor;
322 KAction *m_paLoadImages;
324 KAction *m_paPrintFrame;
325 KAction *m_paSelectAll;
326 KAction *m_paDebugDOMTree;
327 KAction *m_paDebugRenderTree;
329 KParts::PartManager *m_manager;
331 QString m_popupMenuXML;
332 KHTMLPart::GUIProfile m_guiProfile;
339 DOM::NodeImpl *m_findNode;
342 QString m_strSelectedURL;
343 QString m_strSelectedURLTarget;
348 const char *submitAction;
350 khtml::FormData submitFormData;
352 QString submitContentType;
353 QString submitBoundary;
356 SubmitForm *m_submitForm;
358 bool m_bMousePressed;
359 DOM::Node m_mousePressNode; //node under the mouse when the mouse was pressed (set in the mouse handler)
361 khtml::ETextGranularity m_selectionGranularity;
362 bool m_beganSelectingText;
365 QString m_overURLTarget;
368 khtml::Selection m_selection;
369 khtml::Selection m_dragCaret;
370 khtml::Selection m_mark;
371 int m_caretBlinkTimer;
373 bool m_caretVisible:1;
374 bool m_caretBlinks:1;
380 bool m_bSecurityInQuestion:1;
381 bool m_focusNodeRestored:1;
384 khtml::EditCommandPtr m_lastEditCommand;
385 int m_xPosForVerticalArrowNavigation;
386 DOM::CSSMutableStyleDeclarationImpl *m_typingStyle;
388 int m_focusNodeNumber;
390 QPoint m_dragStartPos;
391 #ifdef KHTML_NO_SELECTION
392 QPoint m_dragLastPos;
396 QCursor m_linkCursor;
397 QTimer m_scrollTimer;
399 unsigned long m_loadedObjects;
400 unsigned long m_totalObjectCount;
401 unsigned int m_jobPercent;
403 KHTMLFind *m_findDialog;
408 { caseSensitive = false; direction = false; }
414 findState m_lastFindState;
417 //QGuardedPtr<KParts::Part> m_activeFrame;
418 KParts::Part * m_activeFrame;
419 QGuardedPtr<KHTMLPart> m_opener;
421 bool m_newJSInterpreterExists; // set to 1 by setOpenedByJS, for window.open
423 bool m_bPendingChildRedirection;
425 bool m_executingJavaScriptFormAction;
427 bool m_cancelWithLoadInProgress;
429 QTimer m_lifeSupportTimer;