From b08c67eb1e45cb94dc6250fe555d84f0c0e7debe Mon Sep 17 00:00:00 2001
From: Andrea Diamantini <adjam7@gmail.com>
Date: Wed, 1 Sep 2010 01:39:43 +0200
Subject: This hacks should fix (a lot of) javascript handling. Hope this will
 be properly fixed upstream in KIO...

Please, Jurian & Pano. Let me know if this has been really fixed.

BUG: 242886
---
 src/analyzer/networkanalyzer.cpp |  3 ++-
 src/networkaccessmanager.cpp     | 20 +++++++++++++++++---
 src/protocolhandler.cpp          |  1 +
 3 files changed, 20 insertions(+), 4 deletions(-)

(limited to 'src')

diff --git a/src/analyzer/networkanalyzer.cpp b/src/analyzer/networkanalyzer.cpp
index c5b08835..d0044f47 100644
--- a/src/analyzer/networkanalyzer.cpp
+++ b/src/analyzer/networkanalyzer.cpp
@@ -162,7 +162,8 @@ void NetworkAnalyzer::requestFinished( QObject *replyObject )
     QString contentType = reply->header( QNetworkRequest::ContentTypeHeader ).toString();
     item->setText( 4, contentType );
 
-    if ( status == 302 ) {
+    if ( status == 302 ) 
+    {
         QUrl target = reply->attribute( QNetworkRequest::RedirectionTargetAttribute ).toUrl();
         item->setText( 5, i18n("Redirect: %1", target.toString() ) );
     }
diff --git a/src/networkaccessmanager.cpp b/src/networkaccessmanager.cpp
index f746087a..73c8b599 100644
--- a/src/networkaccessmanager.cpp
+++ b/src/networkaccessmanager.cpp
@@ -65,7 +65,7 @@ QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operat
     QNetworkRequest req = request;
     req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
     req.setRawHeader("Accept-Language", _acceptLanguage);
-
+    
     KIO::CacheControl cc = KProtocolManager::cacheControl();
     switch (cc)
     {
@@ -88,6 +88,20 @@ QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operat
         break;
     }
 
+    // WARNING 
+    // There are actually 3 exceptions here handled with QNAM 
+    // instead of KIO that need fixes upstream before removing. They are:
+    // 1) AJAX requests handling
+    // 2) DeleteOperation
+    // 3) CustomOperation
+    
+    // this is used to handle "AJAX" requests
+    QByteArray header = req.rawHeader("x-requested-with");
+    if(!header.isNull())
+    {
+        return QNetworkAccessManager::createRequest(op, req, outgoingData);
+    }
+    
     switch(op)
     {
     case QNetworkAccessManager::HeadOperation:
@@ -107,14 +121,14 @@ QNetworkReply *NetworkAccessManager::createRequest(QNetworkAccessManager::Operat
         kDebug() << "DELETE OPERATION...";
         reply = QNetworkAccessManager::createRequest(op, req, outgoingData);
         if(!reply)
-            kDebug() << "OOOOOOOOOOOOOOOOOOO DELETE REPLY NULL";
+            kDebug() << "oh oh... DELETE REPLY NULL";
         break;
 
     case QNetworkAccessManager::CustomOperation:
         kDebug() << "CUSTOM OPERATION...";
         reply = QNetworkAccessManager::createRequest(op, req, outgoingData);
         if(!reply)
-            kDebug() << "OOOOOOOOOOOOOOOOOOO CUSTOM REPLY NULL";
+            kDebug() << "oh oh... CUSTOM REPLY NULL";
         break;
 
     default:
diff --git a/src/protocolhandler.cpp b/src/protocolhandler.cpp
index d52433bc..a260ad06 100644
--- a/src/protocolhandler.cpp
+++ b/src/protocolhandler.cpp
@@ -94,6 +94,7 @@ bool ProtocolHandler::preHandling(const QNetworkRequest &request, QWebFrame *fra
     // javascript handling
     if (_url.protocol() == QL1S("javascript"))
     {
+        kDebug() << "JAVASCRIPT URL: " << _url;
         QString scriptSource = _url.authority();
         if(scriptSource.isEmpty()) {
             // if javascript:<code here> then authority() returns
-- 
cgit v1.2.1