[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/libs/webkitkde
From:       Tom Albers <tomalbers () kde ! nl>
Date:       2009-04-15 21:19:05
Message-ID: 1239830345.932188.14414.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 954536 by toma:

Add the possibility to kdewebkit to block external content.


 M  +17 -1     kdenetwork/knetworkaccessmanager.cpp  
 M  +2 -0      kdenetwork/knetworkaccessmanager.h  
 M  +18 -2     kdewebkit/kwebpage.cpp  
 M  +10 -0     kdewebkit/kwebpage.h  


--- trunk/playground/libs/webkitkde/kdenetwork/knetworkaccessmanager.cpp \
#954535:954536 @@ -34,7 +34,8 @@
 class KNetworkAccessManager::KNetworkAccessManagerPrivate
 {
 public:
-    KNetworkAccessManagerPrivate() {}
+    KNetworkAccessManagerPrivate():externalContentAllowed(true) {}
+    bool externalContentAllowed;
 
     static KIO::MetaData metaDataForRequest(QNetworkRequest request);
 };
@@ -49,10 +50,25 @@
     delete d;
 }
 
+void KNetworkAccessManager::setExternalContentAllowed(bool allowed)
+{
+    d->externalContentAllowed = allowed;
+}
+
+bool KNetworkAccessManager::externalContentAllowed()
+{
+    return d->externalContentAllowed;
+}
+
 QNetworkReply *KNetworkAccessManager::createRequest(Operation op, const \
QNetworkRequest &req, QIODevice *outgoingData)  {
     KIO::Job *kioJob = 0;
 
+    if ( !d->externalContentAllowed ) {
+        kDebug() << "Blocked: " << req.url();
+        return new KNetworkReply(op, req, kioJob, this);
+    }
+
     switch (op) {
         case HeadOperation: {
             kDebug() << "HeadOperation:" << req.url();
--- trunk/playground/libs/webkitkde/kdenetwork/knetworkaccessmanager.h #954535:954536
@@ -40,6 +40,8 @@
 public:
     KNetworkAccessManager(QObject *parent);
     virtual ~KNetworkAccessManager();
+    void setExternalContentAllowed(bool allowed);
+    bool externalContentAllowed();
 
 protected:
     virtual QNetworkReply *createRequest(Operation op, const QNetworkRequest &req, \
                QIODevice *outgoingData = 0);
--- trunk/playground/libs/webkitkde/kdewebkit/kwebpage.cpp #954535:954536
@@ -95,16 +95,22 @@
 {
 public:
     KWebPagePrivate() {}
+#if KDE_IS_VERSION(4, 2, 70)
+    KIO::AccessManager* accessManager;
+#else
+    KNetworkAccessManager* accessManager;
+#endif
 };
 
 KWebPage::KWebPage(QObject *parent)
     : QWebPage(parent), d(new KWebPage::KWebPagePrivate())
 {
 #if KDE_IS_VERSION(4, 2, 70)
-    setNetworkAccessManager(new KIO::AccessManager(this));
+    d->accessManager = new KIO::AccessManager(this);
 #else
-    setNetworkAccessManager(new KNetworkAccessManager(this));
+    d->accessManager = new KNetworkAccessManager(this);
 #endif
+    setNetworkAccessManager(d->accessManager);
     setPluginFactory(new KWebPluginFactory(pluginFactory(), this));
 
     action(Back)->setIcon(KIcon("go-previous"));
@@ -164,6 +170,16 @@
     delete d;
 }
 
+void KWebPage::setAllowExternalContent(bool allow)
+{
+    d->accessManager->setExternalContentAllowed(allow);
+}
+
+bool KWebPage::allowExternalContent()
+{
+    return d->accessManager->externalContentAllowed();
+}
+
 QString KWebPage::chooseFile(QWebFrame *frame, const QString &suggestedFile)
 {
     return KFileDialog::getOpenFileName(suggestedFile, QString(), \
                frame->page()->view());
--- trunk/playground/libs/webkitkde/kdewebkit/kwebpage.h #954535:954536
@@ -37,7 +37,17 @@
 public:
     KWebPage(QObject *parent);
     ~KWebPage();
+    /**
+     * Set @p allow to false if you don't want to allow showing external content,
+     * so no external images for example. By default external content is fetched.
+     */
+    void setAllowExternalContent(bool allow);
 
+    /**
+     * returns if external content is fetched, see setAllowExternalContent().
+     */
+    bool allowExternalContent();
+
 protected:
     virtual KWebPage *createWindow(WebWindowType type);
     virtual KWebPage *newWindow(WebWindowType type);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic