⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 khtml_part.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// -*- c-basic-offset: 2 -*-/* This file is part of the KDE project * * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> *                     1999 Lars Knoll <knoll@kde.org> *                     1999 Antti Koivisto <koivisto@kde.org> *                     2000 Simon Hausmann <hausmann@kde.org> *                     2000 Stefan Schimanski <1Stein@gmx.de> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. *///#define SPEED_DEBUG#include "khtml_part.h"#include "khtml_factory.h"#include "khtml_run.h"#include "khtml_events.h"#include "khtml_find.h"#include "khtml_ext.h"#include "khtml_pagecache.h"#include "dom/dom_string.h"#include "dom/dom_element.h"#include "html/html_documentimpl.h"#include "html/html_baseimpl.h"#include "html/html_miscimpl.h"#include "html/html_imageimpl.h"#include "html/htmltokenizer.h"#include "rendering/render_text.h"#include "rendering/render_image.h"#include "rendering/render_frames.h"#include "misc/htmlhashes.h"#include "misc/loader.h"#include "xml/dom_textimpl.h"#include "xml/dom2_eventsimpl.h"#include "css/cssstyleselector.h"#include "java/kjavaappletcontext.h"#if defined(KONQ_EMBEDDED) && defined(ENABLE_JS_HOSTEXTEND)#include <jsextconnect.h>#include <ecma/kjs_dom.h>#endifusing namespace DOM;#include "khtmlview.h"#include "decoder.h"#include "ecma/kjs_proxy.h"#include "khtml_settings.h"#include <sys/types.h>#include <assert.h>#include <unistd.h>#include <kglobal.h>#include <kstddirs.h>#include <kio/job.h>#include <kparts/historyprovider.h>#include <kmimetype.h>#include <kdebug.h>#include <klocale.h>#include <kcharsets.h>#include <kmessagebox.h>#include <kaction.h>#include <kstdaction.h>#include <kfiledialog.h>#include <ktrader.h>#include <kparts/partmanager.h>#include <kxmlgui.h>#include <kcursor.h>#include <kdatastream.h>#include <ktempfile.h>#include <kglobalsettings.h>#include <kurldrag.h>#include <kssl.h>#include <ksslinfodlg.h>#include <qtextcodec.h>#include <qstring.h>#include <qfile.h>#include <qclipboard.h>#include <qapplication.h>#include <qdragobject.h>#include <qmetaobject.h>namespace khtml{  struct ChildFrame  {      enum Type { Frame, IFrame, Object };      ChildFrame() {        m_bCompleted = false;        m_bPreloaded = false;        m_type = Frame;        m_bNotify = false;      }      ~ChildFrame() {  delete (KHTMLRun*) m_run; }    QGuardedPtr<khtml::RenderPart> m_frame;    QGuardedPtr<KParts::ReadOnlyPart> m_part;    QGuardedPtr<KParts::BrowserExtension> m_extension;    QString m_serviceName;    QString m_serviceType;    QStringList m_services;    bool m_bCompleted;    QString m_name;    KParts::URLArgs m_args;    QGuardedPtr<KHTMLRun> m_run;    bool m_bPreloaded;    KURL m_workingURL;    Type m_type;    QStringList m_params;    bool m_bNotify;  };};class FrameList : public QValueList<khtml::ChildFrame>{public:    Iterator find( const QString &name );};int kjs_lib_count = 0;typedef FrameList::ConstIterator ConstFrameIt;typedef FrameList::Iterator FrameIt;class KHTMLPartPrivate{public:  KHTMLPartPrivate(QObject* parent)  {    m_doc = 0L;    m_decoder = 0L;    m_jscript = 0L;    m_runningScripts = 0;    m_kjs_lib = 0;    m_job = 0L;    m_bComplete = true;    m_bLoadEventEmitted = true;    m_bParsing = false;    m_bReloading = false;    m_manager = 0L;    m_settings = new KHTMLSettings(*KHTMLFactory::defaultHTMLSettings());    m_bClearing = false;    m_bCleared = false;    m_fontBase = 0;    m_bDnd = true;    m_startOffset = m_endOffset = 0;    m_startBeforeEnd = true;    m_linkCursor = KCursor::handCursor();    m_loadedImages = 0;    m_totalImageCount = 0;    m_haveEncoding = false;    m_activeFrame = 0L;    m_findDialog = 0;    m_ssl_in_use = false;    m_javaContext = 0;    m_cacheId = 0;    m_frameNameId = 1;    m_bJScriptForce = false;    m_bJScriptOverride = false;    m_bJavaForce = false;    m_bJavaOverride = false;    m_bPluginsForce = false;    m_bPluginsOverride = false;    m_onlyLocalReferences = false;    m_metaRefreshEnabled = true;    m_bHTTPRefresh = false;    m_bFirstData = true;    m_submitForm = 0;    m_delayRedirect = 0;    m_bPendingChildRedirection = false;    // inherit security settings from parent    if(parent && parent->inherits("KHTMLPart"))    {        KHTMLPart* part = static_cast<KHTMLPart*>(parent);        if(part->d)        {            m_bJScriptForce = part->d->m_bJScriptForce;            m_bJScriptOverride = part->d->m_bJScriptOverride;            m_bJavaForce = part->d->m_bJavaForce;            m_bJavaOverride = part->d->m_bJavaOverride;            m_bPluginsForce = part->d->m_bPluginsForce;            m_bPluginsOverride = part->d->m_bPluginsOverride;            // Same for SSL settings            m_ssl_in_use = part->d->m_ssl_in_use;            m_onlyLocalReferences = part->d->m_onlyLocalReferences;        }    }    m_focusNodeNumber = 0;    m_focusNodeRestored = false;    m_opener = 0;    m_openedByJS = false;  }  ~KHTMLPartPrivate()  {    delete m_extension;    delete m_settings;    delete m_jscript;    if ( m_kjs_lib && !--kjs_lib_count )      delete m_kjs_lib;    delete m_javaContext;  }  FrameList m_frames;  QValueList<khtml::ChildFrame> m_objects;  QGuardedPtr<KHTMLView> m_view;  KHTMLPartBrowserExtension *m_extension;  KHTMLPartBrowserHostExtension *m_hostExtension;  DOM::DocumentImpl *m_doc;  khtml::Decoder *m_decoder;  QString m_encoding;  QFont::CharSet m_charset;  long m_cacheId;  QString scheduledScript;  DOM::Node scheduledScriptNode;  KJSProxy *m_jscript;  KLibrary *m_kjs_lib;  int m_runningScripts;  bool m_bJScriptEnabled :1;  bool m_bJavaEnabled :1;  bool m_bPluginsEnabled :1;  bool m_bJScriptForce :1;  bool m_bJScriptOverride :1;  bool m_bJavaForce :1;  bool m_bJavaOverride :1;  bool m_bPluginsForce :1;  bool m_metaRefreshEnabled :1;  bool m_bPluginsOverride :1;  int m_frameNameId;  KJavaAppletContext *m_javaContext;  KHTMLSettings *m_settings;  KIO::TransferJob * m_job;  QString m_kjsStatusBarText;  QString m_kjsDefaultStatusBarText;  // QStrings for SSL metadata  // Note: When adding new variables don't forget to update ::saveState()/::restoreState()!  bool m_ssl_in_use;  QString m_ssl_peer_cert_subject,          m_ssl_peer_cert_issuer,          m_ssl_peer_ip,          m_ssl_cipher,          m_ssl_cipher_desc,          m_ssl_cipher_version,          m_ssl_cipher_used_bits,          m_ssl_cipher_bits,          m_ssl_cert_state,          m_ssl_good_from,          m_ssl_good_until;  bool m_bComplete:1;  bool m_bLoadEventEmitted:1;  bool m_bParsing:1;  bool m_bReloading:1;  bool m_haveEncoding:1;  bool m_haveCharset:1;  bool m_bHTTPRefresh:1;  bool m_onlyLocalReferences :1;  KURL m_workingURL;  KURL m_baseURL;  QString m_baseTarget;  QTimer m_redirectionTimer;#ifdef SPEED_DEBUG  QTime m_parsetime;#endif  int m_delayRedirect;  QString m_redirectURL;  KAction *m_paViewDocument;  KAction *m_paViewFrame;  KAction *m_paSaveBackground;  KAction *m_paSaveDocument;  KAction *m_paSaveFrame;  KAction *m_paSecurity;  KSelectAction *m_paSetEncoding;  KHTMLFontSizeAction *m_paIncFontSizes;  KHTMLFontSizeAction *m_paDecFontSizes;  KAction *m_paLoadImages;  KAction *m_paFind;  KAction *m_paPrintFrame;  KAction *m_paSelectAll;  KAction *m_paDebugDOMTree;  KAction *m_paDebugRenderTree;  KParts::PartManager *m_manager;  QString m_popupMenuXML;  int m_fontBase;  int m_findPos;  DOM::NodeImpl *m_findNode;  QString m_strSelectedURL;  QString m_referrer;  struct SubmitForm  {    const char *submitAction;    QString submitUrl;    QByteArray submitFormData;    QString target;    QString submitContentType;    QString submitBoundary;  };  SubmitForm *m_submitForm;  bool m_bMousePressed;  DOM::Node m_mousePressNode; //node under the mouse when the mouse was pressed (set in the mouse handler)  DOM::Node m_selectionStart;  long m_startOffset;  DOM::Node m_selectionEnd;  long m_endOffset;  QString m_overURL;  bool m_startBeforeEnd:1;  bool m_bDnd:1;  bool m_bFirstData:1;  bool m_bClearing:1;  bool m_bCleared:1;  bool m_focusNodeRestored:1;  int m_focusNodeNumber;  QPoint m_dragStartPos;#ifdef KHTML_NO_SELECTION  QPoint m_dragLastPos;#endif  QCursor m_linkCursor;  QTimer m_scrollTimer;  unsigned long m_loadedImages;  unsigned long m_totalImageCount;  KHTMLFind *m_findDialog;  struct findState  {    findState()    { caseSensitive = false; direction = false; }    QString text;    bool caseSensitive;    bool direction;  };  findState m_lastFindState;  //QGuardedPtr<KParts::Part> m_activeFrame;  KParts::Part * m_activeFrame;  QGuardedPtr<KHTMLPart> m_opener;  bool m_openedByJS;  bool m_bPendingChildRedirection;};namespace khtml {    class PartStyleSheetLoader : public CachedObjectClient    {    public:        PartStyleSheetLoader(KHTMLPart *part, DOM::DOMString url, DocLoader* dl)        {            m_part = part;            m_cachedSheet = dl->requestStyleSheet( url, part->baseURL().url(), QString::null );            if (m_cachedSheet)                m_cachedSheet->ref( this );        }        virtual ~PartStyleSheetLoader()        {            if ( m_cachedSheet ) m_cachedSheet->deref(this);        }        virtual void setStyleSheet(const DOM::DOMString&, const DOM::DOMString &sheet)        {          if ( m_part )            m_part->setUserStyleSheet( sheet.string() );            delete this;        }        QGuardedPtr<KHTMLPart> m_part;        khtml::CachedCSSStyleSheet *m_cachedSheet;    };};FrameList::Iterator FrameList::find( const QString &name ){    Iterator it = begin();    Iterator e = end();    for (; it!=e; ++it )        if ( (*it).m_name==name )            break;    return it;}static QString splitUrlTarget(const QString &url, QString *target=0){   QString result = url;   if(url.left(7) == "target:")   {      KURL u(url);      result = u.ref();      if (target)         *target = u.host();   }   return result;}KHTMLPart::KHTMLPart( QWidget *parentWidget, const char *widgetname, QObject *parent, const char *name,                      GUIProfile prof ): KParts::ReadOnlyPart( parent, name ){    d = 0;    KHTMLFactory::registerPart( this );    setInstance( KHTMLFactory::instance(), prof == BrowserViewGUI ); // doesn't work inside init() for derived classes    // Why?? :-} (Simon)    init( new KHTMLView( this, parentWidget, widgetname ), prof );}KHTMLPart::KHTMLPart( KHTMLView *view, QObject *parent, const char *name, GUIProfile prof ): KParts::ReadOnlyPart( parent, name ){    d = 0;    KHTMLFactory::registerPart( this );    setInstance( KHTMLFactory::instance(), prof == BrowserViewGUI );    assert( view );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -