Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: libadblockplus-android-tests/src/org/adblockplus/android/AndroidWebRequest.java

Issue 29344967: Issue 4031 - Implement tests for libadblockplus-android (Closed)
Patch Set: Created May 27, 2016, 1:38 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: libadblockplus-android-tests/src/org/adblockplus/android/AndroidWebRequest.java
===================================================================
new file mode 100644
--- /dev/null
+++ b/libadblockplus-android-tests/src/org/adblockplus/android/AndroidWebRequest.java
@@ -0,0 +1,143 @@
+/*
+ * This file is part of Adblock Plus <https://adblockplus.org/>,
+ * Copyright (C) 2006-2016 Eyeo GmbH
+ *
+ * Adblock Plus is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3 as
+ * published by the Free Software Foundation.
+ *
+ * Adblock Plus 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
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.adblockplus.android;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashSet;
+import java.util.List;
+
+import org.adblockplus.libadblockplus.AdblockPlusException;
+import org.adblockplus.libadblockplus.FilterEngine;
+import org.adblockplus.libadblockplus.HeaderEntry;
+import org.adblockplus.libadblockplus.ServerResponse;
+import org.adblockplus.libadblockplus.ServerResponse.NsStatus;
+import org.adblockplus.libadblockplus.WebRequest;
+
+import android.util.Log;
+
+public class AndroidWebRequest extends WebRequest
+{
+ public final static String TAG = Utils.getTag(WebRequest.class);
+
+ private final HashSet<String> subscriptionURLs = new HashSet<String>();
+ private final boolean elemhideEnabled;
+
+ public AndroidWebRequest(boolean enableElemhide)
+ {
+ this.elemhideEnabled = enableElemhide;
+ }
+
+ public AndroidWebRequest()
+ {
+ this(false);
+ }
+
+ private boolean isListedSubscriptionUrl(final URL url)
+ {
+ String toCheck = url.toString();
+
+ final int idx = toCheck.indexOf('?');
+ if (idx != -1)
+ {
+ toCheck = toCheck.substring(0, idx);
+ }
+
+ return this.subscriptionURLs.contains(toCheck);
+ }
+
+ protected void updateSubscriptionURLs(final FilterEngine engine)
+ {
+ for (final org.adblockplus.libadblockplus.Subscription s : engine.fetchAvailableSubscriptions())
+ {
+ this.subscriptionURLs.add(s.getProperty("url").toString());
+ }
+ this.subscriptionURLs.add(engine.getPref("subscriptions_exceptionsurl").toString());
+ }
+
+ @Override
+ public ServerResponse httpGET(final String urlStr, final List<HeaderEntry> headers)
+ {
+ try
+ {
+ final URL url = new URL(urlStr);
+ Log.d(TAG, "Downloading from: " + url);
+
+ final HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.setRequestMethod("GET");
+ connection.connect();
+
+ final ServerResponse response = new ServerResponse();
+ response.setResponseStatus(connection.getResponseCode());
+
+ if (response.getResponseStatus() == 200)
+ {
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
+ final StringBuilder sb = new StringBuilder();
+
+ if (!this.elemhideEnabled && isListedSubscriptionUrl(url))
+ {
+ Log.d(TAG, "Removing element hiding rules from: '" + url + "'");
+
+ String line;
+ while ((line = reader.readLine()) != null)
+ {
+ // We're only appending non-element-hiding filters here.
+ //
+ // See:
+ // https://issues.adblockplus.org/ticket/303
+ //
+ // Follow-up issue for removing this hack:
+ // https://issues.adblockplus.org/ticket/1541
+ //
+ if (line.indexOf('#') == -1)
+ {
+ sb.append(line);
+ sb.append('\n');
+ }
+ }
+ }
+ else
+ {
+ int character;
+
+ while ((character = reader.read()) != -1)
+ {
+ sb.append((char) character);
+ }
+ }
+
+ connection.disconnect();
+
+ response.setStatus(NsStatus.OK);
+ response.setResponse(sb.toString());
+ }
+ else
+ {
+ response.setStatus(NsStatus.ERROR_FAILURE);
+ }
+ return response;
+ }
+ catch (final Throwable t)
+ {
+ throw new AdblockPlusException("WebRequest failed", t);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld