diff options
Diffstat (limited to 'src/adblock')
| -rw-r--r-- | src/adblock/adblockmanager.cpp | 150 | ||||
| -rw-r--r-- | src/adblock/adblockmanager.h | 72 | ||||
| -rw-r--r-- | src/adblock/adblocknetworkreply.cpp | 8 | ||||
| -rw-r--r-- | src/adblock/adblocknetworkreply.h | 4 | ||||
| -rw-r--r-- | src/adblock/adblockrule.cpp | 72 | ||||
| -rw-r--r-- | src/adblock/adblockrule.h | 14 | 
6 files changed, 160 insertions, 160 deletions
| diff --git a/src/adblock/adblockmanager.cpp b/src/adblock/adblockmanager.cpp index 0a139bdc..26874e39 100644 --- a/src/adblock/adblockmanager.cpp +++ b/src/adblock/adblockmanager.cpp @@ -10,9 +10,9 @@  * 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  +* 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 @@ -47,10 +47,10 @@  AdBlockManager::AdBlockManager(QObject *parent) -    : QObject(parent) -    , _isAdblockEnabled(false) -    , _isHideAdsEnabled(false) -    , _index(0) +        : QObject(parent) +        , _isAdblockEnabled(false) +        , _isHideAdsEnabled(false) +        , _index(0)  {  } @@ -64,38 +64,38 @@ void AdBlockManager::loadSettings(bool checkUpdateDate)  {      _index = 0;      _buffer.clear(); -     +      _whiteList.clear();      _blackList.clear();      _hideList.clear(); -     +      _isAdblockEnabled = ReKonfig::adBlockEnabled();      kDebug() << "ADBLOCK ENABLED = " << _isAdblockEnabled; -     +      // no need to load filters if adblock is not enabled :) -    if(!_isAdblockEnabled) +    if (!_isAdblockEnabled)          return; -     +      // just to be sure..      _isHideAdsEnabled = ReKonfig::hideAdsEnabled(); -     +      // local settings      KSharedConfig::Ptr config = KGlobal::config(); -    KConfigGroup rulesGroup( config, "rules" ); +    KConfigGroup rulesGroup(config, "rules");      QStringList rules; -    rules = rulesGroup.readEntry( "local-rules" , QStringList() ); +    rules = rulesGroup.readEntry("local-rules" , QStringList());      loadRules(rules);      // ---------------------------------------------------------- -         +      QDateTime today = QDateTime::currentDateTime();      QDateTime lastUpdate = ReKonfig::lastUpdate();  //  the day of the implementation.. :)      int days = ReKonfig::updateInterval(); -     -    if( !checkUpdateDate || today > lastUpdate.addDays( days ) ) + +    if (!checkUpdateDate || today > lastUpdate.addDays(days))      { -        ReKonfig::setLastUpdate( today ); -         +        ReKonfig::setLastUpdate(today); +          updateNextSubscription();          return;      } @@ -104,7 +104,7 @@ void AdBlockManager::loadSettings(bool checkUpdateDate)      QStringList titles = ReKonfig::subscriptionTitles();      foreach(const QString &title, titles)      { -        rules = rulesGroup.readEntry( title + "-rules" , QStringList() ); +        rules = rulesGroup.readEntry(title + "-rules" , QStringList());          loadRules(rules);      }  } @@ -115,34 +115,34 @@ void AdBlockManager::loadRules(const QStringList &rules)      foreach(const QString &stringRule, rules)      {          // ! rules are comments -        if( stringRule.startsWith('!') ) +        if (stringRule.startsWith('!'))              continue; -         +          // [ rules are ABP infos -        if( stringRule.startsWith('[') ) +        if (stringRule.startsWith('['))              continue; -         -        // empty rules are just dangerous..  + +        // empty rules are just dangerous..          // (an empty rule in whitelist allows all, in blacklist blocks all..) -        if( stringRule.isEmpty() ) +        if (stringRule.isEmpty())              continue; -            +          // white rules -        if( stringRule.startsWith( QLatin1String("@@") ) ) +        if (stringRule.startsWith(QLatin1String("@@")))          { -            AdBlockRule rule( stringRule.mid(2) ); +            AdBlockRule rule(stringRule.mid(2));              _whiteList << rule;              continue;          } -         +          // hide (CSS) rules -        if( stringRule.startsWith( QLatin1String("##") ) ) +        if (stringRule.startsWith(QLatin1String("##")))          {              _hideList << stringRule.mid(2);              continue;          } -        AdBlockRule rule( stringRule ); +        AdBlockRule rule(stringRule);          _blackList << rule;      }  } @@ -152,39 +152,39 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *pa  {      if (!_isAdblockEnabled)          return 0; -     +      // we (ad)block just http traffic -    if(request.url().scheme() != QLatin1String("http")) +    if (request.url().scheme() != QLatin1String("http"))          return 0; -     +      QString urlString = request.url().toString();      // check white rules before :)      foreach(const AdBlockRule &filter, _whiteList)      { -        if(filter.match(urlString)) +        if (filter.match(urlString))          {              kDebug() << "****ADBLOCK: WHITE RULE (@@) Matched: ***********";              kDebug() << "Filter exp: " << filter.pattern();              kDebug() << "UrlString:  " << urlString; -            return 0;         +            return 0;          }      } -     +      // then check the black ones :(      foreach(const AdBlockRule &filter, _blackList)      { -        if(filter.match(urlString)) +        if (filter.match(urlString))          {              kDebug() << "****ADBLOCK: BLACK RULE Matched: ***********";              kDebug() << "Filter exp: " << filter.pattern();              kDebug() << "UrlString:  " << urlString; -             +              QWebElement document = page->mainFrame()->documentElement();              QWebElementCollection elements = document.findAll("*"); -            foreach (QWebElement el, elements)  +            foreach(QWebElement el, elements)              { -                if(filter.match( el.attribute("src") ) ) +                if (filter.match(el.attribute("src")))                  {                      kDebug() << "MATCHES ATTRIBUTE!!!!!";                      el.setStyleProperty(QLatin1String("visibility"), QLatin1String("hidden")); @@ -192,12 +192,12 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *pa                      el.setStyleProperty(QLatin1String("height"), QLatin1String("0"));                  }              } -             +              AdBlockNetworkReply *reply = new AdBlockNetworkReply(request, urlString, this); -            return reply;         +            return reply;          }      } -     +      // no match      return 0;  } @@ -205,25 +205,25 @@ QNetworkReply *AdBlockManager::block(const QNetworkRequest &request, WebPage *pa  void AdBlockManager::applyHidingRules(WebPage *page)  { -    if(!page) +    if (!page)          return; -     +      if (!_isAdblockEnabled)          return; -     +      if (!_isHideAdsEnabled)          return;      QWebElement document = page->mainFrame()->documentElement(); -     +      // HIDE RULES      foreach(const QString &filter, _hideList)      {          QWebElementCollection elements = document.findAll(filter); -        foreach (QWebElement el, elements)  +        foreach(QWebElement el, elements)          { -            if(el.isNull()) +            if (el.isNull())                  continue;              kDebug() << "Hide element: " << el.localName();              el.setStyleProperty(QLatin1String("visibility"), QLatin1String("hidden")); @@ -236,17 +236,17 @@ void AdBlockManager::applyHidingRules(WebPage *page)  void AdBlockManager::updateNextSubscription()  {      QStringList locations = ReKonfig::subscriptionLocations(); -     -    if( _index < locations.size() ) + +    if (_index < locations.size())      {          QString urlString = locations.at(_index);          kDebug() << "DOWNLOADING FROM " << urlString; -        KUrl subUrl = KUrl( urlString ); -         -        KIO::TransferJob* job = KIO::get( subUrl , KIO::Reload , KIO::HideProgressInfo );                                               -        connect(job, SIGNAL(data(KIO::Job*, const QByteArray&)), this, SLOT(subscriptionData(KIO::Job*, const QByteArray&)));                                                          +        KUrl subUrl = KUrl(urlString); + +        KIO::TransferJob* job = KIO::get(subUrl , KIO::Reload , KIO::HideProgressInfo); +        connect(job, SIGNAL(data(KIO::Job*, const QByteArray&)), this, SLOT(subscriptionData(KIO::Job*, const QByteArray&)));          connect(job, SIGNAL(result(KJob*)), this, SLOT(slotResult(KJob*))); -         +          return;      } @@ -258,7 +258,7 @@ void AdBlockManager::updateNextSubscription()  void AdBlockManager::slotResult(KJob *job)  {      kDebug() << "SLOTRESULT"; -    if(job->error()) +    if (job->error())          return;      QList<QByteArray> list = _buffer.split('\n'); @@ -270,9 +270,9 @@ void AdBlockManager::slotResult(KJob *job)      }      loadRules(ruleList);      saveRules(ruleList); -     +      _index++; -     +      // last..      updateNextSubscription();  } @@ -282,13 +282,13 @@ void AdBlockManager::subscriptionData(KIO::Job* job, const QByteArray& data)  {      kDebug() << "subscriptionData";      Q_UNUSED(job) -     +      if (data.isEmpty())          return; -                                                                                           +      int oldSize = _buffer.size(); -    _buffer.resize( _buffer.size() + data.size() ); -    memcpy( _buffer.data() + oldSize, data.data(), data.size() );   +    _buffer.resize(_buffer.size() + data.size()); +    memcpy(_buffer.data() + oldSize, data.data(), data.size());  } @@ -297,32 +297,32 @@ void AdBlockManager::saveRules(const QStringList &rules)      QStringList cleanedRules;      foreach(const QString &r, rules)      { -        if( !r.startsWith('!') && !r.startsWith('[') && !r.isEmpty() ) +        if (!r.startsWith('!') && !r.startsWith('[') && !r.isEmpty())              cleanedRules << r;      } -     +      QStringList titles = ReKonfig::subscriptionTitles();      QString title = titles.at(_index) + "-rules"; -     +      KSharedConfig::Ptr config = KGlobal::config(); -    KConfigGroup cg( config , "rules" ); -    cg.writeEntry( title, cleanedRules ); +    KConfigGroup cg(config , "rules"); +    cg.writeEntry(title, cleanedRules);  }  void AdBlockManager::addSubscription(const QString &title, const QString &location)  {      QStringList titles = ReKonfig::subscriptionTitles(); -    if( titles.contains(title) ) +    if (titles.contains(title))          return; -     +      QStringList locations = ReKonfig::subscriptionLocations(); -    if( locations.contains(location) ) +    if (locations.contains(location))          return; -     +      titles << title;      locations << location; -     +      ReKonfig::setSubscriptionTitles(titles);      ReKonfig::setSubscriptionLocations(locations);  } diff --git a/src/adblock/adblockmanager.h b/src/adblock/adblockmanager.h index 9b1cc915..20ca1b6e 100644 --- a/src/adblock/adblockmanager.h +++ b/src/adblock/adblockmanager.h @@ -10,9 +10,9 @@  * 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  +* 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 @@ -30,42 +30,42 @@  // NOTE: AdBlockPlus Filters (fast) summary -//  +//  // ### Basic Filter rules -//  -// RULE = http://example.com/ads/*  +// +// RULE = http://example.com/ads/*  // this should block every link containing all things from that link -//  +//  // ### Exception rules (@@) -//  +//  // RULE = @@advice* -//  +//  // this will save every site, also that matched by other rules, cointaining words  // that starts with "advice". Wildcards && regular expression allowed here. -//  +//  // ### Beginning/end matching rules (||) -//  +//  // RULE=||http://badsite.com -//  +//  // will stop all links starting with http://badsite.com -//  +//  // RULE=*swf|| -//  +//  // will stop all links to direct flash contents -//  +//  // ### Comments (!) -//  +//  // RULE=!azz.. -//  +//  // Every rule starting with a ! is commented out and should not be checked -//  +//  // ### Filter Options -//  -// You can also specify a number of options to modify the behavior of a filter.  +// +// You can also specify a number of options to modify the behavior of a filter.  // You list these options separated with commas after a dollar sign ($) at the end of the filter -//  +//  // RULE=*/ads/*$element,match-case -//  +//  // where $element can be one of the following:  // $script             external scripts loaded via HTML script tag  // $image              regular images, typically loaded via HTML img tag @@ -80,25 +80,25 @@  // $subdocument        embedded pages, usually included via HTML frames  // $document           the page itself (only exception rules can be applied to the page)  // $other              types of requests not covered in the list above -//  +//  // Inverse type options are allowed through the ~ sign, for example: -//  +//  // RULE=*/ads/*~$script,match-case -//  +//  // ### Regular expressions -//  +//  // They usually allow to check for (a lot of) sites, using just one rule, but be careful:  // BASIC FILTERS ARE PROCESSED FASTER THAN REGULAR EXPRESSIONS (In ADP! In rekonq, I don't know...) -//  -//  +// +//  // ### ELEMENT HIDING (##) -//  -// This is quite different from usual adblock (but, for me, more powerful!). Sometimes you will find advertisements  +// +// This is quite different from usual adblock (but, for me, more powerful!). Sometimes you will find advertisements  // that can’t be blocked because they are embedded as text in the web page itself.  // All you can do there is HIDE the element :) -//  +//  // RULE=##div.advise -//  +//  // The previous rule will hide every div whose class is named "advise". Usual CSS selectors apply here :)  //  // END NOTE ---------------------------------------------------------------------------------------------------------- @@ -125,8 +125,8 @@ typedef QList<AdBlockRule> AdBlockRuleList;  class REKONQ_TESTS_EXPORT AdBlockManager : public QObject  { -Q_OBJECT -     +    Q_OBJECT +  public:      AdBlockManager(QObject *parent = 0);      ~AdBlockManager(); @@ -134,7 +134,7 @@ public:      QNetworkReply *block(const QNetworkRequest &request, WebPage *page);      void applyHidingRules(WebPage *page);      void addSubscription(const QString &title, const QString &location); -     +  public slots:      void loadSettings(bool checkUpdateDate = true); @@ -142,11 +142,11 @@ private:      void updateNextSubscription();      void saveRules(const QStringList &);      void loadRules(const QStringList &); -     +  private slots:      void slotResult(KJob *);      void subscriptionData(KIO::Job*, const QByteArray&); -     +  private:      bool _isAdblockEnabled;      bool _isHideAdsEnabled; diff --git a/src/adblock/adblocknetworkreply.cpp b/src/adblock/adblocknetworkreply.cpp index 3b73b8a0..e0ba3b77 100644 --- a/src/adblock/adblocknetworkreply.cpp +++ b/src/adblock/adblocknetworkreply.cpp @@ -36,9 +36,9 @@   * 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  + * 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 @@ -63,12 +63,12 @@  AdBlockNetworkReply::AdBlockNetworkReply(const QNetworkRequest &request, const QString &urlString, QObject *parent) -    : QNetworkReply(parent) +        : QNetworkReply(parent)  {      setOperation(QNetworkAccessManager::GetOperation);      setRequest(request);      setUrl(request.url()); -    setError(QNetworkReply::ContentAccessDenied, i18n("Blocked by AdBlockRule: %1", urlString) ); +    setError(QNetworkReply::ContentAccessDenied, i18n("Blocked by AdBlockRule: %1", urlString));      QTimer::singleShot(0, this, SLOT(delayedFinished()));  } diff --git a/src/adblock/adblocknetworkreply.h b/src/adblock/adblocknetworkreply.h index bbc3471e..c70ecb38 100644 --- a/src/adblock/adblocknetworkreply.h +++ b/src/adblock/adblocknetworkreply.h @@ -36,9 +36,9 @@   * 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  + * 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 diff --git a/src/adblock/adblockrule.cpp b/src/adblock/adblockrule.cpp index c0c3fd5b..d11cc026 100644 --- a/src/adblock/adblockrule.cpp +++ b/src/adblock/adblockrule.cpp @@ -38,9 +38,9 @@   * 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  + * 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 @@ -67,34 +67,34 @@  AdBlockRule::AdBlockRule(const QString &filter) -    : m_optionMatchRule(false) +        : m_optionMatchRule(false)  {      bool isRegExpRule = false;      QString parsedLine = filter; -     -    if ( parsedLine.startsWith( QL1C('/') ) && parsedLine.endsWith( QL1C('/') ) )  + +    if (parsedLine.startsWith(QL1C('/')) && parsedLine.endsWith(QL1C('/')))      {          parsedLine = parsedLine.mid(1);          parsedLine = parsedLine.left(parsedLine.size() - 1);          isRegExpRule = true;      } -     -    int optionsNumber = parsedLine.indexOf( QL1C('$'), 0); + +    int optionsNumber = parsedLine.indexOf(QL1C('$'), 0);      QStringList options; -     -    if (optionsNumber >= 0)  + +    if (optionsNumber >= 0)      {          options = parsedLine.mid(optionsNumber + 1).split(QL1C(','));          parsedLine = parsedLine.left(optionsNumber);      } -    if(!isRegExpRule) +    if (!isRegExpRule)          parsedLine = convertPatternToRegExp(parsedLine); -     +      m_regExp = QRegExp(parsedLine, Qt::CaseInsensitive, QRegExp::RegExp2); -    if ( options.contains( QL1S("match-case") ))  +    if (options.contains(QL1S("match-case")))      {          m_regExp.setCaseSensitivity(Qt::CaseSensitive);          m_optionMatchRule = true; @@ -111,19 +111,19 @@ bool AdBlockRule::match(const QString &encodedUrl) const  // TODO: Reimplement this in rekonq 0.5 :)  // -//     if (matched && !m_options.isEmpty())  +//     if (matched && !m_options.isEmpty())  //     {  //         // we only support domain right now  //         if (m_options.count() == 1)  //         { -//             foreach (const QString &option, m_options)  +//             foreach (const QString &option, m_options)  //             { -//                 if (option.startsWith( QL1S("domain=") ))  +//                 if (option.startsWith( QL1S("domain=") ))  //                 {  //                     QUrl url = QUrl::fromEncoded(encodedUrl.toUtf8());  //                     QString host = url.host();  //                     QStringList domainOptions = option.mid(7).split( QL1C('|') ); -//                     foreach (QString domainOption, domainOptions)  +//                     foreach (QString domainOption, domainOptions)  //                     {  //                         bool negate = domainOption.at(0) == QL1C('~');  //                         if (negate) @@ -147,36 +147,36 @@ bool AdBlockRule::match(const QString &encodedUrl) const  QString AdBlockRule::convertPatternToRegExp(const QString &wildcardPattern)  {      QString pattern = wildcardPattern; -     +      // remove multiple wildcards -    pattern.replace(QRegExp( QL1S("\\*+") ), QL1S("*") ); -     +    pattern.replace(QRegExp(QL1S("\\*+")), QL1S("*")); +      // remove anchors following separator placeholder -    pattern.replace(QRegExp( QL1S("\\^\\|$") ), QL1S("^") ); -     +    pattern.replace(QRegExp(QL1S("\\^\\|$")), QL1S("^")); +      // remove leading wildcards -    pattern.replace(QRegExp( QL1S("^(\\*)") ), QL1S("") ); -     +    pattern.replace(QRegExp(QL1S("^(\\*)")), QL1S("")); +      // remove trailing wildcards -    pattern.replace(QRegExp( QL1S("(\\*)$") ), QL1S("") ); -     +    pattern.replace(QRegExp(QL1S("(\\*)$")), QL1S("")); +      // escape special symbols -    pattern.replace(QRegExp( QL1S("(\\W)") ), QL1S("\\\\1") ); -     +    pattern.replace(QRegExp(QL1S("(\\W)")), QL1S("\\\\1")); +      // process extended anchor at expression start -    pattern.replace(QRegExp( QL1S("^\\\\\\|\\\\\\|") ), QL1S("^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?") ); -     +    pattern.replace(QRegExp(QL1S("^\\\\\\|\\\\\\|")), QL1S("^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?")); +      // process separator placeholders -    pattern.replace(QRegExp( QL1S("\\\\\\^") ), QL1S("(?:[^\\w\\d\\-.%]|$)") ); -     +    pattern.replace(QRegExp(QL1S("\\\\\\^")), QL1S("(?:[^\\w\\d\\-.%]|$)")); +      // process anchor at expression start -    pattern.replace(QRegExp( QL1S("^\\\\\\|") ), QL1S("^") ); -     +    pattern.replace(QRegExp(QL1S("^\\\\\\|")), QL1S("^")); +      // process anchor at expression end -    pattern.replace(QRegExp( QL1S("\\\\\\|$") ), QL1S("$") ); -     +    pattern.replace(QRegExp(QL1S("\\\\\\|$")), QL1S("$")); +      // replace wildcards by .* -    pattern.replace(QRegExp( QL1S("\\\\\\*") ), QL1S(".*") ); +    pattern.replace(QRegExp(QL1S("\\\\\\*")), QL1S(".*"));      // Finally, return...      return pattern; diff --git a/src/adblock/adblockrule.h b/src/adblock/adblockrule.h index ee4825d1..8990630a 100644 --- a/src/adblock/adblockrule.h +++ b/src/adblock/adblockrule.h @@ -37,9 +37,9 @@   * 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  + * 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 @@ -69,14 +69,14 @@ public:      AdBlockRule(const QString &filter);      bool match(const QString &encodedUrl) const; -     +      QString pattern() const; -     -private:     + +private:      QString convertPatternToRegExp(const QString &wildcardPattern); -     +      QRegExp m_regExp; -     +      // Rule Options      bool m_optionMatchRule;  }; | 
