From e6752ba908497ae0c3756315b75509efb2fdbf26 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 23 May 2009 01:28:39 +0200 Subject: splitted web classes --- src/webpage.cpp | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 270 insertions(+) create mode 100644 src/webpage.cpp (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp new file mode 100644 index 00000000..5fae4be3 --- /dev/null +++ b/src/webpage.cpp @@ -0,0 +1,270 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2008 Benjamin C. Meyer +* Copyright (C) 2009 by Andrea Diamantini +* +* +* This program is free software; you can redistribute it +* and/or modify it under the terms of the GNU General +* Public License as published by the Free Software Foundation; +* either version 2, or (at your option) any later version. +* +* This program 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 General Public License for more details. +* +* ============================================================ */ + + +// Self Includes +#include "webpage.h" +#include "webpage.moc" + +// Auto Includes +#include "rekonq.h" + +// Local Includes +#include "application.h" +#include "mainwindow.h" +#include "mainview.h" +#include "cookiejar.h" +#include "networkaccessmanager.h" +#include "download.h" +#include "history.h" + +// KDE Includes +#include +#include +#include +#include +#include + +#include +#include + +// Qt Includes +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +// #include + + +WebPage::WebPage(QObject *parent) + : KWebPage(parent) + , m_keyboardModifiers(Qt::NoModifier) + , m_pressedButtons(Qt::NoButton) +{ + setNetworkAccessManager(Application::networkAccessManager()); + + setForwardUnsupportedContent(true); + connect(this, SIGNAL(unsupportedContent(QNetworkReply *)), this, SLOT(handleUnsupportedContent(QNetworkReply *))); +} + + +bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type) +{ + QString scheme = request.url().scheme(); + if (scheme == QLatin1String("mailto")) + { + KToolInvocation::invokeMailer(request.url()); + return false; + } + + WebView *webView; + + switch (type) + { + // user activated a submit button for an HTML form. + case QWebPage::NavigationTypeFormSubmitted: + kDebug() << "NavigationTypeFormSubmitted"; + kDebug() << request.url(); + break; + + // An HTML form was submitted a second time. + case QWebPage::NavigationTypeFormResubmitted: + kDebug() << "NavigationTypeFormResubmitted"; + break; + + // A navigation to another document using a method not listed above. + case QWebPage::NavigationTypeOther: + kDebug() << "NavigationTypeOther"; + break; + + // user clicked on a link or pressed return on a focused link. + case QWebPage::NavigationTypeLinkClicked: + kDebug() << "NavigationTypeLinkClicked"; + break; + + // Navigation to a previously shown document in the back or forward history is requested. + case QWebPage::NavigationTypeBackOrForward: + kDebug() << "NavigationTypeBackOrForward"; + break; + + // user activated the reload action. + case QWebPage::NavigationTypeReload: + kDebug() << "NavigationTypeReload"; + +#if QT_VERSION <= 040500 + // HACK Ported from Arora + // A short term hack until QtWebKit can get a reload without cache QAction + // *FYI* currently type is never NavigationTypeReload + // See: https://bugs.webkit.org/show_bug.cgi?id=24283 + if (qApp->keyboardModifiers() & Qt::ShiftModifier) + { + kDebug() << "Arora hack"; + QNetworkRequest newRequest(request); + newRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, + QNetworkRequest::AlwaysNetwork); + mainFrame()->load(request); + return false; + } +#endif + + break; + + // should be nothing.. + default: + kDebug() << "Default NON extant case.."; + break; + } + + if (m_keyboardModifiers & Qt::ControlModifier || m_pressedButtons == Qt::MidButton) + { + webView = Application::instance()->newWebView(); + webView->setFocus(); +// webView->load(request); FIXME NOW!! + m_keyboardModifiers = Qt::NoModifier; + m_pressedButtons = Qt::NoButton; + return false; + } + + if (frame == mainFrame()) + { + m_loadingUrl = request.url(); + emit loadingUrl(m_loadingUrl); + } + else + { + // if frame doesn't exists (perhaps) we are pointing to a blank target.. + if (!frame) + { + webView = Application::instance()->newWebView(); + webView->setFocus(); +// webView->load(request); FIXME NOW!! + return false; + } + } + + return QWebPage::acceptNavigationRequest(frame, request, type); +} + + +KWebPage *WebPage::createWindow(QWebPage::WebWindowType type) +{ + kDebug() << "creating window as new tab.. "; + + // added to manage web modal dialogs + if (type == QWebPage::WebModalDialog) + { + // FIXME : need a "real" implementation.. + kDebug() << "Modal Dialog ---------------------------------------"; + } + + WebView *w = Application::instance()->newWebView(); + return w->page(); +} + + +void WebPage::handleUnsupportedContent(QNetworkReply *reply) +{ + // create convenience fake api:// protocol for KDE apidox search and Qt docs + if (reply->url().scheme() == "api") + { + QString path; + QString className = reply->url().host().toLower(); + if (className[0] == 'k') + { + path = QString("http://api.kde.org/new.classmapper.php?class=%1").arg(className); + } + else if (className[0] == 'q') + { + path = QString("http://doc.trolltech.com/4.5/%1.html").arg(className); + } + KUrl url(path); + + Application::instance()->mainWindow()->loadUrl(url); + return; + } + + if (reply->error() == QNetworkReply::NoError) + { + // st iframe unwanted download fix + if (reply->header(QNetworkRequest::ContentTypeHeader).isValid()) + { + KUrl srcUrl = reply->url(); + Application::downloadManager()->newDownload(srcUrl); + } + else + { + kDebug() << "invalid content type header"; + } + return; + } + + // display "not found" page + QString notfoundFilePath = KStandardDirs::locate("data", "rekonq/htmls/notfound.html"); + QFile file(notfoundFilePath); + bool isOpened = file.open(QIODevice::ReadOnly); + if (!isOpened) + { + kWarning() << "Couldn't open the notfound.html file"; + return; + } + QString title = i18n("Error loading page: ") + reply->url().toString(); + + QString imagePath = KIconLoader::global()->iconPath("rekonq", KIconLoader::NoGroup, false); + + QString html = QString(QLatin1String(file.readAll())) + .arg(title) + .arg("file://" + imagePath) + .arg(reply->errorString()) + .arg(reply->url().toString()); + + QList frames; + frames.append(mainFrame()); + while (!frames.isEmpty()) + { + QWebFrame *firstFrame = frames.takeFirst(); + if (firstFrame->url() == reply->url()) + { + firstFrame->setHtml(html, reply->url()); + return; + } + QList children = firstFrame->childFrames(); + foreach(QWebFrame *frame, children) + { + frames.append(frame); + } + } + if (m_loadingUrl == reply->url()) + { + mainFrame()->setHtml(html, reply->url()); + // Don't put error pages to the history. + Application::historyManager()->removeHistoryEntry(reply->url(), mainFrame()->title()); + } +} -- cgit v1.2.1 From ca917ecc5a7b3fc69fcb5682466c421d56627aec Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Sat, 23 May 2009 01:42:26 +0200 Subject: Initial kdewebkit porting. STEP 1 DONE --- src/webpage.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp index 5fae4be3..51a02771 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -147,7 +147,7 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r { webView = Application::instance()->newWebView(); webView->setFocus(); -// webView->load(request); FIXME NOW!! + webView->load(request.url()); m_keyboardModifiers = Qt::NoModifier; m_pressedButtons = Qt::NoButton; return false; @@ -165,7 +165,7 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r { webView = Application::instance()->newWebView(); webView->setFocus(); -// webView->load(request); FIXME NOW!! + webView->load(request.url()); return false; } } -- cgit v1.2.1 From 974058301ed0911bc8bd15a957548ce0771851aa Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Mon, 25 May 2009 16:47:37 +0200 Subject: WebkitKDE porting. I'm working on a big refactoring of the webview/webpage classes. This is (obviously) a work in progress. Perhaps ~50% of the porting.. --- src/webpage.cpp | 78 ++++++++++++--------------------------------------------- 1 file changed, 16 insertions(+), 62 deletions(-) (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp index 51a02771..664c812b 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -66,18 +66,16 @@ WebPage::WebPage(QObject *parent) : KWebPage(parent) - , m_keyboardModifiers(Qt::NoModifier) - , m_pressedButtons(Qt::NoButton) { - setNetworkAccessManager(Application::networkAccessManager()); - setForwardUnsupportedContent(true); - connect(this, SIGNAL(unsupportedContent(QNetworkReply *)), this, SLOT(handleUnsupportedContent(QNetworkReply *))); + setNetworkAccessManager(Application::networkAccessManager()); } bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type) { + + // TODO: implement ioslaves protocols QString scheme = request.url().scheme(); if (scheme == QLatin1String("mailto")) { @@ -85,7 +83,6 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r return false; } - WebView *webView; switch (type) { @@ -118,23 +115,6 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r // user activated the reload action. case QWebPage::NavigationTypeReload: kDebug() << "NavigationTypeReload"; - -#if QT_VERSION <= 040500 - // HACK Ported from Arora - // A short term hack until QtWebKit can get a reload without cache QAction - // *FYI* currently type is never NavigationTypeReload - // See: https://bugs.webkit.org/show_bug.cgi?id=24283 - if (qApp->keyboardModifiers() & Qt::ShiftModifier) - { - kDebug() << "Arora hack"; - QNetworkRequest newRequest(request); - newRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, - QNetworkRequest::AlwaysNetwork); - mainFrame()->load(request); - return false; - } -#endif - break; // should be nothing.. @@ -143,33 +123,6 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r break; } - if (m_keyboardModifiers & Qt::ControlModifier || m_pressedButtons == Qt::MidButton) - { - webView = Application::instance()->newWebView(); - webView->setFocus(); - webView->load(request.url()); - m_keyboardModifiers = Qt::NoModifier; - m_pressedButtons = Qt::NoButton; - return false; - } - - if (frame == mainFrame()) - { - m_loadingUrl = request.url(); - emit loadingUrl(m_loadingUrl); - } - else - { - // if frame doesn't exists (perhaps) we are pointing to a blank target.. - if (!frame) - { - webView = Application::instance()->newWebView(); - webView->setFocus(); - webView->load(request.url()); - return false; - } - } - return QWebPage::acceptNavigationRequest(frame, request, type); } @@ -190,7 +143,7 @@ KWebPage *WebPage::createWindow(QWebPage::WebWindowType type) } -void WebPage::handleUnsupportedContent(QNetworkReply *reply) +void WebPage::slotHandleUnsupportedContent(QNetworkReply *reply) { // create convenience fake api:// protocol for KDE apidox search and Qt docs if (reply->url().scheme() == "api") @@ -213,17 +166,18 @@ void WebPage::handleUnsupportedContent(QNetworkReply *reply) if (reply->error() == QNetworkReply::NoError) { - // st iframe unwanted download fix - if (reply->header(QNetworkRequest::ContentTypeHeader).isValid()) - { - KUrl srcUrl = reply->url(); - Application::downloadManager()->newDownload(srcUrl); - } - else - { - kDebug() << "invalid content type header"; - } - return; + return slotDownloadRequested(reply->request(), reply); +// // st iframe unwanted download fix +// if (reply->header(QNetworkRequest::ContentTypeHeader).isValid()) +// { +// KUrl srcUrl = reply->url(); +// Application::downloadManager()->newDownload(srcUrl); +// } +// else +// { +// kDebug() << "invalid content type header"; +// } +// return; } // display "not found" page -- cgit v1.2.1 From ccb09a51449cfac70cedf33875e317b4005263f4 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 26 May 2009 14:29:42 +0200 Subject: Fixing Compilation --- src/webpage.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp index 664c812b..bfc128b8 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -34,6 +34,7 @@ #include "networkaccessmanager.h" #include "download.h" #include "history.h" +#include "webview.h" // KDE Includes #include -- cgit v1.2.1 From 65887b14f377e6db3fb439a90ca7abd69403f88c Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 26 May 2009 15:06:40 +0200 Subject: managing Network Reply Errors. STEP 1 --- src/webpage.cpp | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp index bfc128b8..e941d2d5 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -69,7 +69,107 @@ WebPage::WebPage(QObject *parent) : KWebPage(parent) { setForwardUnsupportedContent(true); + setNetworkAccessManager(Application::networkAccessManager()); + connect(networkAccessManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(manageNetworkErrors(QNetworkReply*))); +} + + +void WebPage::manageNetworkErrors(QNetworkReply* reply) +{ + switch(reply->error()) + { + + case QNetworkReply::NoError: + kDebug() << "NoError"; + return; + break; + + case QNetworkReply::ConnectionRefusedError: + kDebug() << "ConnectionRefusedError"; + break; + + case QNetworkReply::RemoteHostClosedError: + kDebug() << "RemoteHostClosedError"; + break; + + case QNetworkReply::HostNotFoundError: + kDebug() << "HostNotFoundError"; + break; + + case QNetworkReply::TimeoutError: + kDebug() << "TimeoutError"; + break; + + case QNetworkReply::OperationCanceledError: + kDebug() << "OperationCanceledError"; + break; + + case QNetworkReply::SslHandshakeFailedError: + kDebug() << "SslHandshakeFailedError"; + break; + + case QNetworkReply::ProxyConnectionRefusedError: + kDebug() << "ProxyConnectionRefusedError"; + break; + + case QNetworkReply::ProxyConnectionClosedError: + kDebug() << "ProxyConnectionClosedError"; + break; + + case QNetworkReply::ProxyNotFoundError: + kDebug() << "ProxyNotFoundError"; + break; + + case QNetworkReply::ProxyTimeoutError: + kDebug() << "ProxyTimeoutError"; + break; + + case QNetworkReply::ProxyAuthenticationRequiredError: + kDebug() << "ProxyAuthenticationRequiredError"; + break; + + case QNetworkReply::ContentAccessDenied: + kDebug() << "ContentAccessDenied"; + break; + + case QNetworkReply::ContentOperationNotPermittedError: + kDebug() << "ContentOperationNotPermittedError"; + break; + + case QNetworkReply::ContentNotFoundError: + kDebug() << "ContentNotFoundError"; + break; + + case QNetworkReply::AuthenticationRequiredError: + kDebug() << "AuthenticationRequiredError"; + break; + + case QNetworkReply::ProtocolUnknownError: + kDebug() << "ProtocolUnknownError"; + break; + + case QNetworkReply::ProtocolInvalidOperationError: + kDebug() << "ProtocolInvalidOperationError"; + break; + + case QNetworkReply::UnknownNetworkError: + kDebug() << "UnknownNetworkError"; + break; + + case QNetworkReply::UnknownProxyError: + kDebug() << "UnknownProxyError"; + break; + + case QNetworkReply::UnknownContentError: + kDebug() << "UnknownContentError"; + break; + + case QNetworkReply::ProtocolFailure: + kDebug() << "ProtocolFailure"; + break; + + }; } -- cgit v1.2.1 From 93ead7b8158019d1ea5a73cd3350f44dde8a20e6 Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Wed, 27 May 2009 19:40:47 +0200 Subject: Network Reply Error. STEP 2 --- src/webpage.cpp | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp index e941d2d5..4c361f7b 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -170,6 +170,7 @@ void WebPage::manageNetworkErrors(QNetworkReply* reply) break; }; + viewErrorPage(reply); } @@ -280,7 +281,12 @@ void WebPage::slotHandleUnsupportedContent(QNetworkReply *reply) // } // return; } + viewErrorPage(reply); +} + +void WebPage::viewErrorPage(QNetworkReply *reply) +{ // display "not found" page QString notfoundFilePath = KStandardDirs::locate("data", "rekonq/htmls/notfound.html"); QFile file(notfoundFilePath); @@ -300,26 +306,26 @@ void WebPage::slotHandleUnsupportedContent(QNetworkReply *reply) .arg(reply->errorString()) .arg(reply->url().toString()); - QList frames; - frames.append(mainFrame()); - while (!frames.isEmpty()) - { - QWebFrame *firstFrame = frames.takeFirst(); - if (firstFrame->url() == reply->url()) - { - firstFrame->setHtml(html, reply->url()); - return; - } - QList children = firstFrame->childFrames(); - foreach(QWebFrame *frame, children) - { - frames.append(frame); - } - } - if (m_loadingUrl == reply->url()) - { +// QList frames; +// frames.append(mainFrame()); +// while (!frames.isEmpty()) +// { +// QWebFrame *firstFrame = frames.takeFirst(); +// if (firstFrame->url() == reply->url()) +// { +// firstFrame->setHtml(html, reply->url()); +// return; +// } +// QList children = firstFrame->childFrames(); +// foreach(QWebFrame *frame, children) +// { +// frames.append(frame); +// } +// } +// if (m_loadingUrl == reply->url()) +// { mainFrame()->setHtml(html, reply->url()); // Don't put error pages to the history. Application::historyManager()->removeHistoryEntry(reply->url(), mainFrame()->title()); - } -} +// } +} \ No newline at end of file -- cgit v1.2.1 From 8c5f265d22bd4590612b426ebb9d984b8e49f24c Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Thu, 28 May 2009 01:55:25 +0200 Subject: working on error messages & openLinkInNewTab slot --- src/webpage.cpp | 243 ++++++++++++-------------------------------------------- 1 file changed, 52 insertions(+), 191 deletions(-) (limited to 'src/webpage.cpp') diff --git a/src/webpage.cpp b/src/webpage.cpp index 4c361f7b..cfbc32cf 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -62,8 +62,6 @@ #include #include -// #include - WebPage::WebPage(QObject *parent) : KWebPage(parent) @@ -75,105 +73,6 @@ WebPage::WebPage(QObject *parent) } -void WebPage::manageNetworkErrors(QNetworkReply* reply) -{ - switch(reply->error()) - { - - case QNetworkReply::NoError: - kDebug() << "NoError"; - return; - break; - - case QNetworkReply::ConnectionRefusedError: - kDebug() << "ConnectionRefusedError"; - break; - - case QNetworkReply::RemoteHostClosedError: - kDebug() << "RemoteHostClosedError"; - break; - - case QNetworkReply::HostNotFoundError: - kDebug() << "HostNotFoundError"; - break; - - case QNetworkReply::TimeoutError: - kDebug() << "TimeoutError"; - break; - - case QNetworkReply::OperationCanceledError: - kDebug() << "OperationCanceledError"; - break; - - case QNetworkReply::SslHandshakeFailedError: - kDebug() << "SslHandshakeFailedError"; - break; - - case QNetworkReply::ProxyConnectionRefusedError: - kDebug() << "ProxyConnectionRefusedError"; - break; - - case QNetworkReply::ProxyConnectionClosedError: - kDebug() << "ProxyConnectionClosedError"; - break; - - case QNetworkReply::ProxyNotFoundError: - kDebug() << "ProxyNotFoundError"; - break; - - case QNetworkReply::ProxyTimeoutError: - kDebug() << "ProxyTimeoutError"; - break; - - case QNetworkReply::ProxyAuthenticationRequiredError: - kDebug() << "ProxyAuthenticationRequiredError"; - break; - - case QNetworkReply::ContentAccessDenied: - kDebug() << "ContentAccessDenied"; - break; - - case QNetworkReply::ContentOperationNotPermittedError: - kDebug() << "ContentOperationNotPermittedError"; - break; - - case QNetworkReply::ContentNotFoundError: - kDebug() << "ContentNotFoundError"; - break; - - case QNetworkReply::AuthenticationRequiredError: - kDebug() << "AuthenticationRequiredError"; - break; - - case QNetworkReply::ProtocolUnknownError: - kDebug() << "ProtocolUnknownError"; - break; - - case QNetworkReply::ProtocolInvalidOperationError: - kDebug() << "ProtocolInvalidOperationError"; - break; - - case QNetworkReply::UnknownNetworkError: - kDebug() << "UnknownNetworkError"; - break; - - case QNetworkReply::UnknownProxyError: - kDebug() << "UnknownProxyError"; - break; - - case QNetworkReply::UnknownContentError: - kDebug() << "UnknownContentError"; - break; - - case QNetworkReply::ProtocolFailure: - kDebug() << "ProtocolFailure"; - break; - - }; - viewErrorPage(reply); -} - - bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type) { @@ -185,44 +84,23 @@ bool WebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &r return false; } - - switch (type) + // create convenience fake api:// protocol for KDE apidox search and Qt docs + if (scheme == QLatin1String("api")) { - // user activated a submit button for an HTML form. - case QWebPage::NavigationTypeFormSubmitted: - kDebug() << "NavigationTypeFormSubmitted"; - kDebug() << request.url(); - break; - - // An HTML form was submitted a second time. - case QWebPage::NavigationTypeFormResubmitted: - kDebug() << "NavigationTypeFormResubmitted"; - break; - - // A navigation to another document using a method not listed above. - case QWebPage::NavigationTypeOther: - kDebug() << "NavigationTypeOther"; - break; - - // user clicked on a link or pressed return on a focused link. - case QWebPage::NavigationTypeLinkClicked: - kDebug() << "NavigationTypeLinkClicked"; - break; - - // Navigation to a previously shown document in the back or forward history is requested. - case QWebPage::NavigationTypeBackOrForward: - kDebug() << "NavigationTypeBackOrForward"; - break; - - // user activated the reload action. - case QWebPage::NavigationTypeReload: - kDebug() << "NavigationTypeReload"; - break; - - // should be nothing.. - default: - kDebug() << "Default NON extant case.."; - break; + QString path; + QString className = request.url().host().toLower(); + if (className[0] == 'k') + { + path = QString("http://api.kde.org/new.classmapper.php?class=%1").arg(className); + } + else if (className[0] == 'q') + { + path = QString("http://doc.trolltech.com/4.5/%1.html").arg(className); + } + KUrl url(path); + + Application::instance()->mainWindow()->loadUrl(url); + return false; } return QWebPage::acceptNavigationRequest(frame, request, type); @@ -245,42 +123,24 @@ KWebPage *WebPage::createWindow(QWebPage::WebWindowType type) } -void WebPage::slotHandleUnsupportedContent(QNetworkReply *reply) -{ - // create convenience fake api:// protocol for KDE apidox search and Qt docs - if (reply->url().scheme() == "api") - { - QString path; - QString className = reply->url().host().toLower(); - if (className[0] == 'k') - { - path = QString("http://api.kde.org/new.classmapper.php?class=%1").arg(className); - } - else if (className[0] == 'q') - { - path = QString("http://doc.trolltech.com/4.5/%1.html").arg(className); - } - KUrl url(path); +// FIXME: implement here (perhaps) mimetype discerning && file loading (KToolInvocation??) +// void WebPage::slotHandleUnsupportedContent(QNetworkReply *reply) +// { +// +// if (reply->error() == QNetworkReply::NoError) +// { +// return slotDownloadRequested(reply->request(), reply); +// } +// +// viewErrorPage(reply); +// } - Application::instance()->mainWindow()->loadUrl(url); + +void WebPage::manageNetworkErrors(QNetworkReply* reply) +{ + if(reply->error() == QNetworkReply::NoError) return; - } - if (reply->error() == QNetworkReply::NoError) - { - return slotDownloadRequested(reply->request(), reply); -// // st iframe unwanted download fix -// if (reply->header(QNetworkRequest::ContentTypeHeader).isValid()) -// { -// KUrl srcUrl = reply->url(); -// Application::downloadManager()->newDownload(srcUrl); -// } -// else -// { -// kDebug() << "invalid content type header"; -// } -// return; - } viewErrorPage(reply); } @@ -306,26 +166,27 @@ void WebPage::viewErrorPage(QNetworkReply *reply) .arg(reply->errorString()) .arg(reply->url().toString()); -// QList frames; -// frames.append(mainFrame()); -// while (!frames.isEmpty()) -// { -// QWebFrame *firstFrame = frames.takeFirst(); -// if (firstFrame->url() == reply->url()) -// { -// firstFrame->setHtml(html, reply->url()); -// return; -// } -// QList children = firstFrame->childFrames(); -// foreach(QWebFrame *frame, children) -// { -// frames.append(frame); -// } -// } -// if (m_loadingUrl == reply->url()) -// { + // test + QList frames; + frames.append(mainFrame()); + while (!frames.isEmpty()) + { + QWebFrame *firstFrame = frames.takeFirst(); + if (firstFrame->url() == reply->url()) + { + firstFrame->setHtml(html, reply->url()); + return; + } + QList children = firstFrame->childFrames(); + foreach(QWebFrame *frame, children) + { + frames.append(frame); + } + } + if (m_loadingUrl == reply->url()) + { mainFrame()->setHtml(html, reply->url()); // Don't put error pages to the history. Application::historyManager()->removeHistoryEntry(reply->url(), mainFrame()->title()); -// } -} \ No newline at end of file + } +} -- cgit v1.2.1