]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/helpers/BlockListHelper.java
Move Clear and Exit to the top of the navigation menu. https://redmine.stoutner...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / helpers / BlockListHelper.java
index 55ad050a4c56c37ad39e97aa0de5f8a9b12f128b..2e9773a2c4f920c1292ec874aac753f76aa7a46e 100644 (file)
@@ -20,7 +20,6 @@
 package com.stoutner.privacybrowser.helpers;
 
 import android.content.res.AssetManager;
-import android.net.Uri;
 
 import com.stoutner.privacybrowser.activities.MainWebViewActivity;
 
@@ -36,7 +35,7 @@ public class BlockListHelper {
         // Initialize the header list.
         List<String[]> headers = new ArrayList<>();  // 0.
 
-        // Initialize the white lists.
+        // Initialize the whitelists.
         List<String[]> mainWhiteList = new ArrayList<>();  // 1.
         List<String[]> finalWhiteList = new ArrayList<>();  // 2.
         List<String[]> domainWhiteList = new ArrayList<>();  // 3.
@@ -46,7 +45,7 @@ public class BlockListHelper {
         List<String[]> thirdPartyDomainWhiteList = new ArrayList<>();  // 7.
         List<String[]> thirdPartyDomainInitialWhiteList = new ArrayList<>();  // 8.
 
-        // Initialize the black lists
+        // Initialize the blacklists
         List<String[]> mainBlackList = new ArrayList<>();  // 9.
         List<String[]> initialBlackList = new ArrayList<>();  // 10.
         List<String[]> finalBlackList = new ArrayList<>();  // 11.
@@ -85,6 +84,16 @@ public class BlockListHelper {
                     // Do nothing.  Privacy Browser does not currently use these entries.
 
                     //Log.i("BlockLists", "Not added: " + blockListEntry);
+                } else //noinspection StatementWithEmptyBody
+                    if (blockListEntry.contains("$csp=script-src")) {  // Ignore entries that contain `$csp=script-src`.
+                        // Do nothing.  It is uncertain what this directive is even supposed to mean, and it is blocking entire websites like androidcentral.com.  https://redmine.stoutner.com/issues/306.
+
+                        //Log.i("BlockLists", headers.get(1)[0] + " not added: " + originalBlockListEntry);
+                } else //noinspection StatementWithEmptyBody
+                    if (blockListEntry.contains("$websocket") || blockListEntry.contains("$third-party,websocket") || blockListEntry.contains("$script,websocket")) {  // Ignore entries with `websocket`.
+                        // Do nothing.  Privacy Browser does not differentiate between websocket requests and other requests and these entries cause a lot of false positivies.
+
+                        //Log.i("BlockLists", headers.get(1)[0] + " not added: " + originalBlockListEntry);
                 } else if (blockListEntry.startsWith("!")) {  //  Comment entries.
                     if (blockListEntry.startsWith("! Version:")) {
                         // Get the list version number.
@@ -1575,24 +1584,14 @@ public class BlockListHelper {
         return combinedLists;
     }
 
-    public boolean isBlocked(String currentUrl, String resourceUrl, ArrayList<List<String[]>> blockList) {
-        // Get the block list name.
+    public boolean isBlocked(String currentDomain, String resourceUrl, boolean isThirdPartyRequest, ArrayList<List<String[]>> blockList) {
+        // Get the blocklist name.
         String BLOCK_LIST_NAME_STRING = blockList.get(0).get(1)[0];
 
-        // Get the current domain.
-        Uri currentUri = Uri.parse(currentUrl);
-        String currentDomain = currentUri.getHost();
-
-        // Get the resource domain.
-        Uri resourceUri = Uri.parse(resourceUrl);
-        String resourceDomain = resourceUri.getHost();
-
-        // Initialize the third-party request tracker.
-        boolean thirdPartyRequest = false;
-
-        // If one of the domains is `about:blank` it will throw a null object reference on the string comparison.
-        if ((currentDomain != null) && (resourceDomain != null)) {
-            thirdPartyRequest = !resourceDomain.equals(currentDomain);
+        // Assert that currentDomain != null only if this is a third party request.  Apparently, lint can't tell that this isn't redundant.
+        //noinspection RedundantIfStatement
+        if (isThirdPartyRequest) {
+            assert currentDomain != null;
         }
 
         // Process the white lists.
@@ -1781,7 +1780,7 @@ public class BlockListHelper {
         }
 
         // Only check the third-party white lists if this is a third-party request.
-        if (thirdPartyRequest) {
+        if (isThirdPartyRequest) {
             // Third-party white list.
             for (String[] whiteListEntry : blockList.get(MainWebViewActivity.THIRD_PARTY_WHITELIST)) {
                 switch (whiteListEntry.length) {
@@ -2110,7 +2109,7 @@ public class BlockListHelper {
         }
 
         // Only check the third-party black lists if this is a third-party request.
-        if (thirdPartyRequest) {
+        if (isThirdPartyRequest) {
             // Third-party black list.
             for (String[] blackListEntry : blockList.get(MainWebViewActivity.THIRD_PARTY_BLACKLIST)) {
                 switch (blackListEntry.length) {