| Index: libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java |
| diff --git a/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java b/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java |
| index 8caf6da1a1883f594f2628e0ecac4e483747b212..c8352f1332a9efcf41dced7621e04bdea4d12401 100644 |
| --- a/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java |
| +++ b/libadblockplus-android/src/org/adblockplus/libadblockplus/android/AdblockEngine.java |
| @@ -31,6 +31,7 @@ import org.adblockplus.libadblockplus.FilterChangeCallback; |
| import org.adblockplus.libadblockplus.FilterEngine; |
| import org.adblockplus.libadblockplus.FilterEngine.ContentType; |
| import org.adblockplus.libadblockplus.JsEngine; |
| +import org.adblockplus.libadblockplus.JsValue; |
| import org.adblockplus.libadblockplus.LogSystem; |
| import org.adblockplus.libadblockplus.ShowNotificationCallback; |
| import org.adblockplus.libadblockplus.Subscription; |
| @@ -232,8 +233,25 @@ public final class AdblockEngine |
| final org.adblockplus.libadblockplus.android.Subscription subscription = |
| new org.adblockplus.libadblockplus.android.Subscription(); |
| - subscription.title = jsSubscription.getProperty("title").toString(); |
| - subscription.url = jsSubscription.getProperty("url").toString(); |
| + JsValue jsTitle = jsSubscription.getProperty("title"); |
|
diegocarloslima
2017/03/30 14:19:29
If JsValue implemented AutoCloseable, we could avo
anton
2017/03/30 14:34:15
i've been thinking about it and it makes no sense
diegocarloslima
2017/03/30 14:47:18
Yeah, he can forget on both approaches. The advant
|
| + try |
| + { |
| + subscription.title = jsTitle.toString(); |
| + } |
| + finally |
| + { |
| + jsTitle.dispose(); |
| + } |
| + |
| + JsValue jsUrl = jsSubscription.getProperty("url"); |
| + try |
| + { |
| + subscription.url = jsUrl.toString(); |
| + } |
| + finally |
| + { |
| + jsUrl.dispose(); |
| + } |
| return subscription; |
| } |
| @@ -254,19 +272,48 @@ public final class AdblockEngine |
| public org.adblockplus.libadblockplus.android.Subscription[] getRecommendedSubscriptions() |
| { |
| - return convertJsSubscriptions(this.filterEngine.fetchAvailableSubscriptions()); |
| + List<Subscription> subscriptions = this.filterEngine.fetchAvailableSubscriptions(); |
| + try |
| + { |
| + return convertJsSubscriptions(subscriptions); |
| + } |
| + finally |
| + { |
| + for (Subscription eachSubscription : subscriptions) |
| + { |
| + eachSubscription.dispose(); |
| + } |
| + } |
| } |
| public org.adblockplus.libadblockplus.android.Subscription[] getListedSubscriptions() |
| { |
| - return convertJsSubscriptions(this.filterEngine.getListedSubscriptions()); |
| + List<Subscription> subscriptions = this.filterEngine.getListedSubscriptions(); |
| + try |
| + { |
| + return convertJsSubscriptions(subscriptions); |
| + } |
| + finally |
| + { |
| + for (Subscription eachSubscription : subscriptions) |
| + { |
| + eachSubscription.dispose(); |
| + } |
| + } |
| } |
| public void clearSubscriptions() |
| { |
| for (final Subscription s : this.filterEngine.getListedSubscriptions()) |
| { |
| - s.removeFromList(); |
| + try |
| + { |
| + s.removeFromList(); |
| + } |
| + finally |
| + { |
| + s.dispose(); |
| + } |
| } |
| } |
| @@ -277,7 +324,14 @@ public final class AdblockEngine |
| final Subscription sub = this.filterEngine.getSubscription(url); |
| if (sub != null) |
| { |
| - sub.addToList(); |
| + try |
| + { |
| + sub.addToList(); |
| + } |
| + finally |
| + { |
| + sub.dispose(); |
| + } |
| } |
| } |
| @@ -290,7 +344,14 @@ public final class AdblockEngine |
| final Subscription sub = this.filterEngine.getSubscription(eachUrl); |
| if (sub != null) |
| { |
| - sub.addToList(); |
| + try |
| + { |
| + sub.addToList(); |
| + } |
| + finally |
| + { |
| + sub.dispose(); |
| + } |
| } |
| } |
| } |
| @@ -299,7 +360,14 @@ public final class AdblockEngine |
| { |
| for (final Subscription s : this.filterEngine.getListedSubscriptions()) |
| { |
| - s.updateFilters(); |
| + try |
| + { |
| + s.updateFilters(); |
| + } |
| + finally |
| + { |
| + s.dispose(); |
| + } |
| } |
| } |
| @@ -307,14 +375,35 @@ public final class AdblockEngine |
| { |
| final String url = getAcceptableAdsSubscriptionURL(); |
| List<Subscription> subscriptions = this.filterEngine.getListedSubscriptions(); |
| - for (Subscription eachSubscription : subscriptions) |
| + try |
| { |
| - if (eachSubscription.getProperty("url").toString().equals(url)) |
| + for (Subscription eachSubscription : subscriptions) |
| { |
| - return true; |
| + JsValue jsUrl = eachSubscription.getProperty("url"); |
| + try |
| + { |
| + if (jsUrl.toString().equals(url)) |
| + { |
| + return true; |
| + } |
| + } |
| + finally |
| + { |
| + jsUrl.dispose(); |
| + } |
| + } |
| + return false; |
| + } |
| + finally |
| + { |
| + if (subscriptions != null) |
| + { |
| + for (Subscription eachSubscription : subscriptions) |
| + { |
| + eachSubscription.dispose(); |
| + } |
| } |
| } |
| - return false; |
| } |
| public void setEnabled(final boolean enabled) |
| @@ -329,7 +418,15 @@ public final class AdblockEngine |
| public String getAcceptableAdsSubscriptionURL() |
| { |
| - return this.filterEngine.getPref("subscriptions_exceptionsurl").toString(); |
| + JsValue jsPref = this.filterEngine.getPref("subscriptions_exceptionsurl"); |
| + try |
| + { |
| + return jsPref.toString(); |
| + } |
| + finally |
| + { |
| + jsPref.dispose(); |
| + } |
| } |
| public void setAcceptableAdsEnabled(final boolean enabled) |
| @@ -338,20 +435,35 @@ public final class AdblockEngine |
| final Subscription sub = this.filterEngine.getSubscription(url); |
| if (sub != null) |
| { |
| - if (enabled) |
| + try |
| { |
| - sub.addToList(); |
| + if (enabled) |
| + { |
| + sub.addToList(); |
| + } |
| + else |
| + { |
| + sub.removeFromList(); |
| + } |
| } |
| - else |
| + finally |
| { |
| - sub.removeFromList(); |
| + sub.dispose(); |
| } |
| } |
| } |
| public String getDocumentationLink() |
| { |
| - return this.filterEngine.getPref("documentation_link").toString(); |
| + JsValue jsPref = this.filterEngine.getPref("documentation_link"); |
| + try |
| + { |
| + return jsPref.toString(); |
| + } |
| + finally |
| + { |
| + jsPref.dispose(); |
| + } |
| } |
| public boolean matches(final String fullUrl, final ContentType contentType, final String[] referrerChainArray) |
| @@ -368,19 +480,36 @@ public final class AdblockEngine |
| return false; |
| } |
| - // hack: if there is no referrer, block only if filter is domain-specific |
| - // (to re-enable in-app ads blocking, proposed on 12.11.2012 Monday meeting) |
| - // (documentUrls contains the referrers on Android) |
| try |
| { |
| - if (referrerChainArray.length == 0 && (filter.getProperty("text").toString()).contains("||")) |
| + // hack: if there is no referrer, block only if filter is domain-specific |
| + // (to re-enable in-app ads blocking, proposed on 12.11.2012 Monday meeting) |
| + // (documentUrls contains the referrers on Android) |
| + try |
| + { |
| + JsValue jsText = filter.getProperty("text"); |
| + try |
| + { |
| + if (referrerChainArray.length == 0 && (jsText.toString()).contains("||")) |
| + { |
| + return false; |
| + } |
| + } |
| + finally |
| + { |
| + jsText.dispose(); |
| + } |
| + } |
| + catch (NullPointerException e) |
| { |
| - return false; |
| } |
| - } catch (NullPointerException e) { |
| - } |
| - return filter.getType() != Filter.Type.EXCEPTION; |
| + return filter.getType() != Filter.Type.EXCEPTION; |
| + } |
| + finally |
| + { |
| + filter.dispose(); |
| + } |
| } |
| public boolean isDocumentWhitelisted(final String url, final String[] referrerChainArray) |