Index: libadblockplus-android-webview/src/org/adblockplus/libadblockplus/android/webview/AdblockWebView.java |
diff --git a/libadblockplus-android-webview/src/org/adblockplus/libadblockplus/android/webview/AdblockWebView.java b/libadblockplus-android-webview/src/org/adblockplus/libadblockplus/android/webview/AdblockWebView.java |
index 73d88b377fa1b9f16ce3ed49441b1fc46231fe94..98b67a57e8b88d9e139ebc61160b58d2f193ab4b 100644 |
--- a/libadblockplus-android-webview/src/org/adblockplus/libadblockplus/android/webview/AdblockWebView.java |
+++ b/libadblockplus-android-webview/src/org/adblockplus/libadblockplus/android/webview/AdblockWebView.java |
@@ -818,92 +818,95 @@ public class AdblockWebView extends WebView |
WebView webview, String url, boolean isMainFrame, |
boolean isXmlHttpRequest, String[] referrerChainArray) |
{ |
- // if dispose() was invoke, but the page is still loading then just let it go |
- if (provider.getCounter() == 0) |
+ synchronized (provider.getEngineLock()) |
{ |
- e("FilterEngine already disposed, allow loading"); |
- |
- // allow loading by returning null |
- return null; |
- } |
- else |
- { |
- provider.waitForReady(); |
- } |
- |
- if (isMainFrame) |
- { |
- // never blocking main frame requests, just subrequests |
- w(url + " is main frame, allow loading"); |
- |
- // allow loading by returning null |
- return null; |
- } |
- |
- // whitelisted |
- if (provider.getEngine().isDomainWhitelisted(url, referrerChainArray)) |
- { |
- w(url + " domain is whitelisted, allow loading"); |
- |
- // allow loading by returning null |
- return null; |
- } |
- |
- if (provider.getEngine().isDocumentWhitelisted(url, referrerChainArray)) |
- { |
- w(url + " document is whitelisted, allow loading"); |
- |
- // allow loading by returning null |
- return null; |
- } |
+ // if dispose() was invoke, but the page is still loading then just let it go |
+ if (provider.getCounter() == 0) |
+ { |
+ e("FilterEngine already disposed, allow loading"); |
- // determine the content |
- FilterEngine.ContentType contentType; |
- if (isXmlHttpRequest) |
- { |
- contentType = FilterEngine.ContentType.XMLHTTPREQUEST; |
- } |
- else |
- { |
- if (RE_JS.matcher(url).find()) |
+ // allow loading by returning null |
+ return null; |
+ } |
+ else |
{ |
- contentType = FilterEngine.ContentType.SCRIPT; |
+ provider.waitForReady(); |
} |
- else if (RE_CSS.matcher(url).find()) |
+ |
+ if (isMainFrame) |
{ |
- contentType = FilterEngine.ContentType.STYLESHEET; |
+ // never blocking main frame requests, just subrequests |
+ w(url + " is main frame, allow loading"); |
+ |
+ // allow loading by returning null |
+ return null; |
} |
- else if (RE_IMAGE.matcher(url).find()) |
+ |
+ // whitelisted |
+ if (provider.getEngine().isDomainWhitelisted(url, referrerChainArray)) |
{ |
- contentType = FilterEngine.ContentType.IMAGE; |
+ w(url + " domain is whitelisted, allow loading"); |
+ |
+ // allow loading by returning null |
+ return null; |
} |
- else if (RE_FONT.matcher(url).find()) |
+ |
+ if (provider.getEngine().isDocumentWhitelisted(url, referrerChainArray)) |
{ |
- contentType = FilterEngine.ContentType.FONT; |
+ w(url + " document is whitelisted, allow loading"); |
+ |
+ // allow loading by returning null |
+ return null; |
} |
- else if (RE_HTML.matcher(url).find()) |
+ |
+ // determine the content |
+ FilterEngine.ContentType contentType; |
+ if (isXmlHttpRequest) |
{ |
- contentType = FilterEngine.ContentType.SUBDOCUMENT; |
+ contentType = FilterEngine.ContentType.XMLHTTPREQUEST; |
} |
else |
{ |
- contentType = FilterEngine.ContentType.OTHER; |
+ if (RE_JS.matcher(url).find()) |
+ { |
+ contentType = FilterEngine.ContentType.SCRIPT; |
+ } |
+ else if (RE_CSS.matcher(url).find()) |
+ { |
+ contentType = FilterEngine.ContentType.STYLESHEET; |
+ } |
+ else if (RE_IMAGE.matcher(url).find()) |
+ { |
+ contentType = FilterEngine.ContentType.IMAGE; |
+ } |
+ else if (RE_FONT.matcher(url).find()) |
+ { |
+ contentType = FilterEngine.ContentType.FONT; |
+ } |
+ else if (RE_HTML.matcher(url).find()) |
+ { |
+ contentType = FilterEngine.ContentType.SUBDOCUMENT; |
+ } |
+ else |
+ { |
+ contentType = FilterEngine.ContentType.OTHER; |
+ } |
} |
- } |
- // check if we should block |
- if (provider.getEngine().matches(url, contentType, referrerChainArray)) |
- { |
- w("Blocked loading " + url); |
+ // check if we should block |
+ if (provider.getEngine().matches(url, contentType, referrerChainArray)) |
+ { |
+ w("Blocked loading " + url); |
- // if we should block, return empty response which results in 'errorLoading' callback |
- return new WebResourceResponse("text/plain", "UTF-8", null); |
- } |
+ // if we should block, return empty response which results in 'errorLoading' callback |
+ return new WebResourceResponse("text/plain", "UTF-8", null); |
+ } |
- d("Allowed loading " + url); |
+ d("Allowed loading " + url); |
- // continue by returning null |
- return null; |
+ // continue by returning null |
+ return null; |
+ } |
} |
@TargetApi(Build.VERSION_CODES.LOLLIPOP) |
@@ -971,76 +974,79 @@ public class AdblockWebView extends WebView |
@Override |
public void run() |
{ |
- try |
+ synchronized (provider.getEngineLock()) |
{ |
- if (provider.getCounter() == 0) |
- { |
- w("FilterEngine already disposed"); |
- selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |
- } |
- else |
+ try |
{ |
- provider.waitForReady(); |
- String[] referrers = new String[] |
- { |
- url |
- }; |
+ if (provider.getCounter() == 0) |
+ { |
+ w("FilterEngine already disposed"); |
+ selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |
+ } |
+ else |
+ { |
+ provider.waitForReady(); |
+ String[] referrers = new String[] |
+ { |
+ url |
+ }; |
- List<Subscription> subscriptions = provider |
- .getEngine() |
- .getFilterEngine() |
- .getListedSubscriptions(); |
+ List<Subscription> subscriptions = provider |
+ .getEngine() |
+ .getFilterEngine() |
+ .getListedSubscriptions(); |
- try |
- { |
- d("Listed subscriptions: " + subscriptions.size()); |
- if (debugMode) |
+ try |
+ { |
+ d("Listed subscriptions: " + subscriptions.size()); |
+ if (debugMode) |
+ { |
+ for (Subscription eachSubscription : subscriptions) |
+ { |
+ d("Subscribed to " |
+ + (eachSubscription.isDisabled() ? "disabled" : "enabled") |
+ + " " + eachSubscription); |
+ } |
+ } |
+ } |
+ finally |
{ |
for (Subscription eachSubscription : subscriptions) |
{ |
- d("Subscribed to " |
- + (eachSubscription.isDisabled() ? "disabled" : "enabled") |
- + " " + eachSubscription); |
+ eachSubscription.dispose(); |
} |
} |
- } |
- finally |
- { |
- for (Subscription eachSubscription : subscriptions) |
+ |
+ final String domain = provider.getEngine().getFilterEngine().getHostFromURL(url); |
+ if (domain == null) |
{ |
- eachSubscription.dispose(); |
+ e("Failed to extract domain from " + url); |
+ selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |
} |
- } |
+ else |
+ { |
+ d("Requesting elemhide selectors from AdblockEngine for " + url + " in " + this); |
+ List<String> selectors = provider |
+ .getEngine() |
+ .getElementHidingSelectors(url, domain, referrers); |
- final String domain = provider.getEngine().getFilterEngine().getHostFromURL(url); |
- if (domain == null) |
+ d("Finished requesting elemhide selectors, got " + selectors.size() + " in " + this); |
+ selectorsString = Utils.stringListToJsonArray(selectors); |
+ } |
+ } |
+ } |
+ finally |
+ { |
+ if (isCancelled.get()) |
{ |
- e("Failed to extract domain from " + url); |
- selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |
+ w("This thread is cancelled, exiting silently " + this); |
} |
else |
{ |
- d("Requesting elemhide selectors from AdblockEngine for " + url + " in " + this); |
- List<String> selectors = provider |
- .getEngine() |
- .getElementHidingSelectors(url, domain, referrers); |
- |
- d("Finished requesting elemhide selectors, got " + selectors.size() + " in " + this); |
- selectorsString = Utils.stringListToJsonArray(selectors); |
+ finish(selectorsString); |
} |
} |
} |
- finally |
- { |
- if (isCancelled.get()) |
- { |
- w("This thread is cancelled, exiting silently " + this); |
- } |
- else |
- { |
- finish(selectorsString); |
- } |
- } |
} |
private void onFinished() |