📄 khtml_part.cpp.orig
字号:
} if (d->m_statusBarIconLabel) { if (d->m_ssl_in_use) QToolTip::add(d->m_statusBarIconLabel, i18n("Session is secured with %1 bit %2.").arg(d->m_ssl_cipher_used_bits).arg(d->m_ssl_cipher)); else QToolTip::add(d->m_statusBarIconLabel, i18n("Session is not secured.")); } QString iconName; switch (sec) { case NotCrypted: iconName = "decrypted"; if ( d->m_statusBarIconLabel ) { d->m_statusBarExtension->removeStatusBarItem( d->m_statusBarIconLabel ); delete d->m_statusBarIconLabel; d->m_statusBarIconLabel = 0L; } break; case Encrypted: iconName = "encrypted"; break; case Mixed: iconName = "halfencrypted"; break; } d->m_paSecurity->setIcon( iconName ); if ( d->m_statusBarIconLabel ) d->m_statusBarIconLabel->setPixmap( SmallIcon( iconName, instance() ) );#endif // KONQ_EMBEDDED}void KHTMLPart::slotData( KIO::Job* kio_job, const QByteArray &data ){ assert ( d->m_job == kio_job ); //kdDebug( 6050 ) << "slotData: " << data.size() << endl; // The first data ? if ( !d->m_workingURL.isEmpty() ) { //kdDebug( 6050 ) << "begin!" << endl; // We must suspend KIO while we're inside begin() because it can cause // crashes if a window (such as kjsdebugger) goes back into the event loop, // more data arrives, and begin() gets called again (re-entered). d->m_job->suspend(); begin( d->m_workingURL, d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset ); d->m_job->resume(); if (d->m_cachePolicy == KIO::CC_Refresh) d->m_doc->docLoader()->setCachePolicy(KIO::CC_Verify); else d->m_doc->docLoader()->setCachePolicy(d->m_cachePolicy); d->m_workingURL = KURL(); d->m_cacheId = KHTMLPageCache::self()->createCacheEntry(); // When the first data arrives, the metadata has just been made available d->m_httpHeaders = d->m_job->queryMetaData("HTTP-Headers"); time_t cacheCreationDate = d->m_job->queryMetaData("cache-creation-date").toLong(); d->m_doc->docLoader()->setCacheCreationDate(cacheCreationDate); d->m_pageServices = d->m_job->queryMetaData("PageServices"); d->m_pageReferrer = d->m_job->queryMetaData("referrer"); d->m_bSecurityInQuestion = false; d->m_ssl_in_use = (d->m_job->queryMetaData("ssl_in_use") == "TRUE"); { KHTMLPart *p = parentPart(); if (p && p->d->m_ssl_in_use != d->m_ssl_in_use) { while (p->parentPart()) p = p->parentPart(); p->setPageSecurity( Mixed ); p->d->m_bSecurityInQuestion = true; } } setPageSecurity( d->m_ssl_in_use ? Encrypted : NotCrypted ); // Shouldn't all of this be done only if ssl_in_use == true ? (DF) d->m_ssl_parent_ip = d->m_job->queryMetaData("ssl_parent_ip"); d->m_ssl_parent_cert = d->m_job->queryMetaData("ssl_parent_cert"); d->m_ssl_peer_certificate = d->m_job->queryMetaData("ssl_peer_certificate"); d->m_ssl_peer_chain = d->m_job->queryMetaData("ssl_peer_chain"); d->m_ssl_peer_ip = d->m_job->queryMetaData("ssl_peer_ip"); d->m_ssl_cipher = d->m_job->queryMetaData("ssl_cipher"); d->m_ssl_cipher_desc = d->m_job->queryMetaData("ssl_cipher_desc"); d->m_ssl_cipher_version = d->m_job->queryMetaData("ssl_cipher_version"); d->m_ssl_cipher_used_bits = d->m_job->queryMetaData("ssl_cipher_used_bits"); d->m_ssl_cipher_bits = d->m_job->queryMetaData("ssl_cipher_bits"); d->m_ssl_cert_state = d->m_job->queryMetaData("ssl_cert_state"); if (d->m_statusBarIconLabel) { QToolTip::remove(d->m_statusBarIconLabel); if (d->m_ssl_in_use) { QToolTip::add(d->m_statusBarIconLabel, i18n("Session is secured with %1 bit %2.").arg(d->m_ssl_cipher_used_bits).arg(d->m_ssl_cipher)); } else { QToolTip::add(d->m_statusBarIconLabel, i18n("Session is not secured.")); } } // Check for charset meta-data QString qData = d->m_job->queryMetaData("charset"); if ( !qData.isEmpty() && !d->m_haveEncoding ) // only use information if the user didn't override the settings d->m_encoding = qData; // Support for http-refresh qData = d->m_job->queryMetaData("http-refresh"); if( !qData.isEmpty()) d->m_doc->processHttpEquiv("refresh", qData); // DISABLED: Support Content-Location per section 14.14 of RFC 2616. // See BR# 51185,BR# 82747 /* QString baseURL = d->m_job->queryMetaData ("content-location"); if (!baseURL.isEmpty()) d->m_doc->setBaseURL(KURL( d->m_doc->completeURL(baseURL) )); */ if ( !m_url.isLocalFile() ) { // Support for http last-modified d->m_lastModified = d->m_job->queryMetaData("modified"); } else d->m_lastModified = QString::null; // done on-demand by lastModified() } KHTMLPageCache::self()->addData(d->m_cacheId, data); write( data.data(), data.size() ); if (d->m_frame && d->m_frame->m_jscript) d->m_frame->m_jscript->dataReceived();}void KHTMLPart::slotRestoreData(const QByteArray &data ){ // The first data ? if ( !d->m_workingURL.isEmpty() ) { long saveCacheId = d->m_cacheId; QString savePageReferrer = d->m_pageReferrer; QString saveEncoding = d->m_encoding; begin( d->m_workingURL, d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset ); d->m_encoding = saveEncoding; d->m_pageReferrer = savePageReferrer; d->m_cacheId = saveCacheId; d->m_workingURL = KURL(); } //kdDebug( 6050 ) << "slotRestoreData: " << data.size() << endl; write( data.data(), data.size() ); if (data.size() == 0) { //kdDebug( 6050 ) << "slotRestoreData: <<end of data>>" << endl; // End of data. if (d->m_doc && d->m_doc->parsing()) end(); //will emit completed() }}void KHTMLPart::showError( KIO::Job* job ){ kdDebug(6050) << "KHTMLPart::showError d->m_bParsing=" << (d->m_doc && d->m_doc->parsing()) << " d->m_bComplete=" << d->m_bComplete << " d->m_bCleared=" << d->m_bCleared << endl; if (job->error() == KIO::ERR_NO_CONTENT) return; if ( (d->m_doc && d->m_doc->parsing()) || d->m_workingURL.isEmpty() ) // if we got any data already job->showErrorDialog( /*d->m_view*/ ); else { htmlError( job->error(), job->errorText(), d->m_workingURL ); }}// This is a protected method, placed here because of it's relevance to showErrorvoid KHTMLPart::htmlError( int errorCode, const QString& text, const KURL& reqUrl ){ kdDebug(6050) << "KHTMLPart::htmlError errorCode=" << errorCode << " text=" << text << endl; // make sure we're not executing any embedded JS bool bJSFO = d->m_bJScriptForce; bool bJSOO = d->m_bJScriptOverride; d->m_bJScriptForce = false; d->m_bJScriptOverride = true; begin(); QString errText = QString::fromLatin1( "<HTML dir=%1><HEAD><TITLE>" ) .arg(QApplication::reverseLayout() ? "rtl" : "ltr"); errText += i18n( "Error while loading %1" ).arg( reqUrl.htmlURL() ); errText += QString::fromLatin1( "</TITLE></HEAD><BODY><P>" ); errText += i18n( "An error occurred while loading <B>%1</B>:" ).arg( reqUrl.htmlURL() ); errText += QString::fromLatin1( "</P>" ); errText += QStyleSheet::convertFromPlainText( KIO::buildErrorString( errorCode, text ) ); errText += QString::fromLatin1( "</BODY></HTML>" ); write(errText); end(); d->m_bJScriptForce = bJSFO; d->m_bJScriptOverride = bJSOO; // make the working url the current url, so that reload works and // emit the progress signals to advance one step in the history // (so that 'back' works) m_url = reqUrl; // same as d->m_workingURL d->m_workingURL = KURL(); emit started( 0 ); emit completed(); return; // following disabled until 3.1 QString errorName, techName, description; QStringList causes, solutions; QByteArray raw = KIO::rawErrorDetail( errorCode, text, &reqUrl ); QDataStream stream(raw, IO_ReadOnly); stream >> errorName >> techName >> description >> causes >> solutions; QString url, protocol, datetime; url = reqUrl.prettyURL(); protocol = reqUrl.protocol(); datetime = KGlobal::locale()->formatDateTime( QDateTime::currentDateTime(), false ); QString doc = QString::fromLatin1( "<html><head><title>" ); doc += i18n( "Error: " ); doc += errorName; doc += QString::fromLatin1( " - %1</title></head><body><h1>" ).arg( url ); doc += i18n( "The requested operation could not be completed" ); doc += QString::fromLatin1( "</h1><h2>" ); doc += errorName; doc += QString::fromLatin1( "</h2>" ); if ( !techName.isNull() ) { doc += QString::fromLatin1( "<h2>" ); doc += i18n( "Technical Reason: " ); doc += techName; doc += QString::fromLatin1( "</h2>" ); } doc += QString::fromLatin1( "<h3>" ); doc += i18n( "Details of the Request:" ); doc += QString::fromLatin1( "</h3><ul><li>" ); doc += i18n( "URL: %1" ).arg( url ); doc += QString::fromLatin1( "</li><li>" ); if ( !protocol.isNull() ) { // uncomment for 3.1... i18n change // doc += i18n( "Protocol: %1" ).arg( protocol ).arg( protocol ); doc += QString::fromLatin1( "</li><li>" ); } doc += i18n( "Date and Time: %1" ).arg( datetime ); doc += QString::fromLatin1( "</li><li>" ); doc += i18n( "Additional Information: %1" ).arg( text ); doc += QString::fromLatin1( "</li></ul><h3>" ); doc += i18n( "Description:" ); doc += QString::fromLatin1( "</h3><p>" ); doc += description; doc += QString::fromLatin1( "</p>" ); if ( causes.count() ) { doc += QString::fromLatin1( "<h3>" ); doc += i18n( "Possible Causes:" ); doc += QString::fromLatin1( "</h3><ul><li>" ); doc += causes.join( "</li><li>" ); doc += QString::fromLatin1( "</li></ul>" ); } if ( solutions.count() ) { doc += QString::fromLatin1( "<h3>" ); doc += i18n( "Possible Solutions:" ); doc += QString::fromLatin1( "</h3><ul><li>" ); doc += solutions.join( "</li><li>" ); doc += QString::fromLatin1( "</li></ul>" ); } doc += QString::fromLatin1( "</body></html>" ); write( doc ); end();}void KHTMLPart::slotFinished( KIO::Job * job ){ d->m_job = 0L; d->m_jobspeed = 0L; if (job->error()) { KHTMLPageCache::self()->cancelEntry(d->m_cacheId); // The following catches errors that occur as a result of HTTP // to FTP redirections where the FTP URL is a directory. Since // KIO cannot change a redirection request from GET to LISTDIR, // we have to take care of it here once we know for sure it is // a directory... if (job->error() == KIO::ERR_IS_DIRECTORY) { KParts::URLArgs args; emit d->m_extension->openURLRequest( d->m_workingURL, args ); } else { emit canceled( job->errorString() ); // TODO: what else ? checkCompleted(); showError( job ); } return; } KIO::TransferJob *tjob = ::qt_cast<KIO::TransferJob*>(job); if (tjob && tjob->isErrorPage()) { khtml::RenderPart *renderPart = d->m_frame->m_frame; if (renderPart) { HTMLObjectElementImpl* elt = static_cast<HTMLObjectElementImpl *>(renderPart->element()); if (!elt) return; elt->renderAlternative(); checkCompleted(); } if (d->m_bComplete) return; } //kdDebug( 6050 ) << "slotFinished" << endl; KHTMLPageCache::self()->endData(d->m_cacheId); if (d->m_frame && d->m_frame->m_jscript) d->m_frame->m_jscript->dataReceived(); if ( d->m_doc && d->m_doc->docLoader()->expireDate() && m_url.protocol().lower().startsWith("http")) KIO::http_update_cache(m_url, false, d->m_doc->docLoader()->expireDate()); d->m_workingURL = KURL(); if ( d->m_doc && d->m_doc->parsing()) end(); //will emit completed()}void KHTMLPart::begin( const KURL &url, int xOffset, int yOffset ){ // No need to show this for a new page until an error is triggered if (!parentPart()) { removeJSErrorExtension(); setSuppressedPopupIndicator( false ); d->m_openableSuppressedPopups = 0; for ( KHTMLPart* part = d->m_suppressedPopupOriginParts.first(); part; part = d->m_suppressedPopupOriginParts.next() ) { KJS::Window *w = KJS::Window::retrieveWindow( part ); if (w) w->forgetSuppressedWindows(); } } clear(); d->m_bCleared = false; d->m_cacheId = 0; d->m_bComplete = false; d->m_bLoadEventEmitted = false; if(url.isValid()) { QString urlString = url.url(); KHTMLFactory::vLinks()->insert( urlString ); QString urlString2 = url.prettyURL(); if ( urlString != urlString2 ) { KHTMLFactory::vLinks()->insert( urlString2 ); } } // ### //stopParser(); KParts::URLArgs args( d->m_extension->urlArgs() ); args.xOffset = xOffset; args.yOffset = yOffset; d->m_extension->setURLArgs( args ); d->m_pageReferrer = QString::null; KURL ref(url); d->m_referrer = ref.protocol().startsWith("http") ? ref.url() : ""; m_url = url; bool servedAsXHTML = args.serviceType == "application/xhtml+xml"; bool servedAsXML = KMimeType::mimeType(args.serviceType)->is( "text/xml" ); // ### not sure if XHTML documents served as text/xml should use DocumentImpl or HTMLDocumentImpl i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -