diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 721f617..5f5f5e4 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -2516,6 +2516,7 @@ CACHE MANIFEST + HTML @@ -2541,6 +2542,7 @@ CACHE MANIFEST before do driver.browser.url_blacklist = ["http://example.org/path/to/file", + "http://example.*/foo/*", "http://example.com", "#{AppRunner.app_host}/script"] end @@ -2571,6 +2573,13 @@ CACHE MANIFEST end end + it "should not fetch urls blocked by wildcard match" do + visit('/') + driver.within_frame('frame4') do + driver.find("//body").first.text.should be_empty + end + end + it "returns a status code for blocked urls" do visit("/") driver.within_frame('frame1') do diff --git a/src/NetworkAccessManager.cpp b/src/NetworkAccessManager.cpp index d06a33f..ed88399 100644 --- a/src/NetworkAccessManager.cpp +++ b/src/NetworkAccessManager.cpp @@ -74,19 +74,19 @@ void NetworkAccessManager::setUrlBlacklist(QStringList urlBlacklist) { QStringListIterator iter(urlBlacklist); while (iter.hasNext()) { - m_urlBlacklist << QUrl(iter.next()); + m_urlBlacklist << iter.next(); } }; bool NetworkAccessManager::isBlacklisted(QUrl url) { - QListIterator iter(m_urlBlacklist); + QString urlString = url.toString(); + QStringListIterator iter(m_urlBlacklist); while (iter.hasNext()) { - QUrl blacklisted = iter.next(); + QRegExp blacklisted = QRegExp(iter.next()); + blacklisted.setPatternSyntax(QRegExp::Wildcard); - if (blacklisted == url) { - return true; - } else if (blacklisted.path().isEmpty() && blacklisted.isParentOf(url)) { + if(urlString.contains(blacklisted)) { return true; } } diff --git a/src/NetworkAccessManager.h b/src/NetworkAccessManager.h index 06dda54..80cff09 100644 --- a/src/NetworkAccessManager.h +++ b/src/NetworkAccessManager.h @@ -21,7 +21,7 @@ class NetworkAccessManager : public QNetworkAccessManager { QNetworkReply* createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice * outgoingData); QString m_userName; QString m_password; - QList m_urlBlacklist; + QStringList m_urlBlacklist; private: void disableKeyChainLookup();