From b7b5f23f928ef93abff83b6eadede922c34b355b Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Tue, 31 Jul 2012 23:58:06 +0200 Subject: Copy webtab related files from rekonq repo NOTE: This change does NOT affect CMakeLists.txt, so that compilation will continue to work as the previous commit. I'm just trying to track changes from original rekonq files... --- src/webtab/networkaccessmanager.cpp | 120 ++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 src/webtab/networkaccessmanager.cpp (limited to 'src/webtab/networkaccessmanager.cpp') diff --git a/src/webtab/networkaccessmanager.cpp b/src/webtab/networkaccessmanager.cpp new file mode 100644 index 00000000..dc10da1b --- /dev/null +++ b/src/webtab/networkaccessmanager.cpp @@ -0,0 +1,120 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2007-2008 Trolltech ASA. All rights reserved +* Copyright (C) 2008-2012 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 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* 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. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* ============================================================ */ + + + +// Self Includes +#include "networkaccessmanager.h" +#include "networkaccessmanager.moc" + +// Local Includes +#include "adblockmanager.h" +#include "application.h" +#include "webpage.h" + +// KDE Includes +#include +#include + +// Qt Includes +#include +#include + + +class NullNetworkReply : public QNetworkReply +{ +public: + NullNetworkReply(const QNetworkRequest &req, QObject* parent = 0) + : QNetworkReply(parent) + { + setRequest(req); + setUrl(req.url()); + setHeader(QNetworkRequest::ContentLengthHeader, 0); + setHeader(QNetworkRequest::ContentTypeHeader, "text/plain"); + setError(QNetworkReply::ContentAccessDenied, i18n("Null reply")); + setAttribute(QNetworkRequest::User, QNetworkReply::ContentAccessDenied); + QTimer::singleShot(0, this, SIGNAL(finished())); + } + + virtual void abort() {} + virtual qint64 bytesAvailable() const + { + return 0; + } + +protected: + virtual qint64 readData(char*, qint64) + { + return -1; + } +}; + + +// ---------------------------------------------------------------------------------------------- + + +NetworkAccessManager::NetworkAccessManager(QObject *parent) + : AccessManager(parent) +{ + QString c = KGlobal::locale()->language(); + + if (c == QL1S("C")) + c = QL1S("en-US"); + else + c = c.replace(QL1C('_') , QL1C('-')); + + c.append(QL1S(", en-US; q=0.8, en; q=0.6")); + + _acceptLanguage = c.toLatin1(); +} + + +QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *outgoingData) +{ + WebPage *parentPage = qobject_cast(parent()); + + // NOTE: This to get sure we are NOT serving unused requests + if (!parentPage) + return new NullNetworkReply(request, this); + + QNetworkReply *reply = 0; + + // set our "nice" accept-language header... + QNetworkRequest req = request; + req.setRawHeader("Accept-Language", _acceptLanguage); + + // Handle GET operations with AdBlock + if (op == QNetworkAccessManager::GetOperation) + reply = rApp->adblockManager()->block(req, parentPage); + + if (!reply) + reply = AccessManager::createRequest(op, req, outgoingData); + + if (parentPage->hasNetworkAnalyzerEnabled()) + emit networkData(op, req, reply); + + return reply; +} -- cgit v1.2.1