| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3  * Copyright (C) 2006-present eyeo GmbH | 3  * Copyright (C) 2006-present eyeo GmbH | 
| 4  * | 4  * | 
| 5  * Adblock Plus is free software: you can redistribute it and/or modify | 5  * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6  * it under the terms of the GNU General Public License version 3 as | 6  * it under the terms of the GNU General Public License version 3 as | 
| 7  * published by the Free Software Foundation. | 7  * published by the Free Software Foundation. | 
| 8  * | 8  * | 
| 9  * Adblock Plus is distributed in the hope that it will be useful, | 9  * Adblock Plus is distributed in the hope that it will be useful, | 
| 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 811       else | 811       else | 
| 812       { | 812       { | 
| 813         super.onReceivedLoginRequest(view, realm, account, args); | 813         super.onReceivedLoginRequest(view, realm, account, args); | 
| 814       } | 814       } | 
| 815     } | 815     } | 
| 816 | 816 | 
| 817     protected WebResourceResponse shouldInterceptRequest( | 817     protected WebResourceResponse shouldInterceptRequest( | 
| 818       WebView webview, String url, boolean isMainFrame, | 818       WebView webview, String url, boolean isMainFrame, | 
| 819       boolean isXmlHttpRequest, String[] referrerChainArray) | 819       boolean isXmlHttpRequest, String[] referrerChainArray) | 
| 820     { | 820     { | 
| 821       // if dispose() was invoke, but the page is still loading then just let it
       go | 821       synchronized (provider.getEngineLock()) | 
| 822       if (provider.getCounter() == 0) |  | 
| 823       { | 822       { | 
| 824         e("FilterEngine already disposed, allow loading"); | 823         // if dispose() was invoke, but the page is still loading then just let 
      it go | 
|  | 824         if (provider.getCounter() == 0) | 
|  | 825         { | 
|  | 826           e("FilterEngine already disposed, allow loading"); | 
| 825 | 827 | 
| 826         // allow loading by returning null | 828           // allow loading by returning null | 
| 827         return null; | 829           return null; | 
| 828       } |  | 
| 829       else |  | 
| 830       { |  | 
| 831         provider.waitForReady(); |  | 
| 832       } |  | 
| 833 |  | 
| 834       if (isMainFrame) |  | 
| 835       { |  | 
| 836         // never blocking main frame requests, just subrequests |  | 
| 837         w(url + " is main frame, allow loading"); |  | 
| 838 |  | 
| 839         // allow loading by returning null |  | 
| 840         return null; |  | 
| 841       } |  | 
| 842 |  | 
| 843       // whitelisted |  | 
| 844       if (provider.getEngine().isDomainWhitelisted(url, referrerChainArray)) |  | 
| 845       { |  | 
| 846         w(url + " domain is whitelisted, allow loading"); |  | 
| 847 |  | 
| 848         // allow loading by returning null |  | 
| 849         return null; |  | 
| 850       } |  | 
| 851 |  | 
| 852       if (provider.getEngine().isDocumentWhitelisted(url, referrerChainArray)) |  | 
| 853       { |  | 
| 854         w(url + " document is whitelisted, allow loading"); |  | 
| 855 |  | 
| 856         // allow loading by returning null |  | 
| 857         return null; |  | 
| 858       } |  | 
| 859 |  | 
| 860       // determine the content |  | 
| 861       FilterEngine.ContentType contentType; |  | 
| 862       if (isXmlHttpRequest) |  | 
| 863       { |  | 
| 864         contentType = FilterEngine.ContentType.XMLHTTPREQUEST; |  | 
| 865       } |  | 
| 866       else |  | 
| 867       { |  | 
| 868         if (RE_JS.matcher(url).find()) |  | 
| 869         { |  | 
| 870           contentType = FilterEngine.ContentType.SCRIPT; |  | 
| 871         } |  | 
| 872         else if (RE_CSS.matcher(url).find()) |  | 
| 873         { |  | 
| 874           contentType = FilterEngine.ContentType.STYLESHEET; |  | 
| 875         } |  | 
| 876         else if (RE_IMAGE.matcher(url).find()) |  | 
| 877         { |  | 
| 878           contentType = FilterEngine.ContentType.IMAGE; |  | 
| 879         } |  | 
| 880         else if (RE_FONT.matcher(url).find()) |  | 
| 881         { |  | 
| 882           contentType = FilterEngine.ContentType.FONT; |  | 
| 883         } |  | 
| 884         else if (RE_HTML.matcher(url).find()) |  | 
| 885         { |  | 
| 886           contentType = FilterEngine.ContentType.SUBDOCUMENT; |  | 
| 887         } | 830         } | 
| 888         else | 831         else | 
| 889         { | 832         { | 
| 890           contentType = FilterEngine.ContentType.OTHER; | 833           provider.waitForReady(); | 
| 891         } | 834         } | 
|  | 835 | 
|  | 836         if (isMainFrame) | 
|  | 837         { | 
|  | 838           // never blocking main frame requests, just subrequests | 
|  | 839           w(url + " is main frame, allow loading"); | 
|  | 840 | 
|  | 841           // allow loading by returning null | 
|  | 842           return null; | 
|  | 843         } | 
|  | 844 | 
|  | 845         // whitelisted | 
|  | 846         if (provider.getEngine().isDomainWhitelisted(url, referrerChainArray)) | 
|  | 847         { | 
|  | 848           w(url + " domain is whitelisted, allow loading"); | 
|  | 849 | 
|  | 850           // allow loading by returning null | 
|  | 851           return null; | 
|  | 852         } | 
|  | 853 | 
|  | 854         if (provider.getEngine().isDocumentWhitelisted(url, referrerChainArray)) | 
|  | 855         { | 
|  | 856           w(url + " document is whitelisted, allow loading"); | 
|  | 857 | 
|  | 858           // allow loading by returning null | 
|  | 859           return null; | 
|  | 860         } | 
|  | 861 | 
|  | 862         // determine the content | 
|  | 863         FilterEngine.ContentType contentType; | 
|  | 864         if (isXmlHttpRequest) | 
|  | 865         { | 
|  | 866           contentType = FilterEngine.ContentType.XMLHTTPREQUEST; | 
|  | 867         } | 
|  | 868         else | 
|  | 869         { | 
|  | 870           if (RE_JS.matcher(url).find()) | 
|  | 871           { | 
|  | 872             contentType = FilterEngine.ContentType.SCRIPT; | 
|  | 873           } | 
|  | 874           else if (RE_CSS.matcher(url).find()) | 
|  | 875           { | 
|  | 876             contentType = FilterEngine.ContentType.STYLESHEET; | 
|  | 877           } | 
|  | 878           else if (RE_IMAGE.matcher(url).find()) | 
|  | 879           { | 
|  | 880             contentType = FilterEngine.ContentType.IMAGE; | 
|  | 881           } | 
|  | 882           else if (RE_FONT.matcher(url).find()) | 
|  | 883           { | 
|  | 884             contentType = FilterEngine.ContentType.FONT; | 
|  | 885           } | 
|  | 886           else if (RE_HTML.matcher(url).find()) | 
|  | 887           { | 
|  | 888             contentType = FilterEngine.ContentType.SUBDOCUMENT; | 
|  | 889           } | 
|  | 890           else | 
|  | 891           { | 
|  | 892             contentType = FilterEngine.ContentType.OTHER; | 
|  | 893           } | 
|  | 894         } | 
|  | 895 | 
|  | 896         // check if we should block | 
|  | 897         if (provider.getEngine().matches(url, contentType, referrerChainArray)) | 
|  | 898         { | 
|  | 899           w("Blocked loading " + url); | 
|  | 900 | 
|  | 901           // if we should block, return empty response which results in 'errorLo
      ading' callback | 
|  | 902           return new WebResourceResponse("text/plain", "UTF-8", null); | 
|  | 903         } | 
|  | 904 | 
|  | 905         d("Allowed loading " + url); | 
|  | 906 | 
|  | 907         // continue by returning null | 
|  | 908         return null; | 
| 892       } | 909       } | 
| 893 |  | 
| 894       // check if we should block |  | 
| 895       if (provider.getEngine().matches(url, contentType, referrerChainArray)) |  | 
| 896       { |  | 
| 897         w("Blocked loading " + url); |  | 
| 898 |  | 
| 899         // if we should block, return empty response which results in 'errorLoad
      ing' callback |  | 
| 900         return new WebResourceResponse("text/plain", "UTF-8", null); |  | 
| 901       } |  | 
| 902 |  | 
| 903       d("Allowed loading " + url); |  | 
| 904 |  | 
| 905       // continue by returning null |  | 
| 906       return null; |  | 
| 907     } | 910     } | 
| 908 | 911 | 
| 909     @TargetApi(Build.VERSION_CODES.LOLLIPOP) | 912     @TargetApi(Build.VERSION_CODES.LOLLIPOP) | 
| 910     @Override | 913     @Override | 
| 911     public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceR
      equest request) | 914     public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceR
      equest request) | 
| 912     { | 915     { | 
| 913       // here we just trying to fill url -> referrer map | 916       // here we just trying to fill url -> referrer map | 
| 914       // blocking/allowing loading will happen in `shouldInterceptRequest(WebVie
      w,String)` | 917       // blocking/allowing loading will happen in `shouldInterceptRequest(WebVie
      w,String)` | 
| 915       String url = request.getUrl().toString(); | 918       String url = request.getUrl().toString(); | 
| 916 | 919 | 
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 964     public ElemHideThread(CountDownLatch finishedLatch) | 967     public ElemHideThread(CountDownLatch finishedLatch) | 
| 965     { | 968     { | 
| 966       this.finishedLatch = finishedLatch; | 969       this.finishedLatch = finishedLatch; | 
| 967       isFinished = new AtomicBoolean(false); | 970       isFinished = new AtomicBoolean(false); | 
| 968       isCancelled = new AtomicBoolean(false); | 971       isCancelled = new AtomicBoolean(false); | 
| 969     } | 972     } | 
| 970 | 973 | 
| 971     @Override | 974     @Override | 
| 972     public void run() | 975     public void run() | 
| 973     { | 976     { | 
| 974       try | 977       synchronized (provider.getEngineLock()) | 
| 975       { | 978       { | 
| 976         if (provider.getCounter() == 0) | 979         try | 
| 977         { | 980         { | 
| 978           w("FilterEngine already disposed"); | 981           if (provider.getCounter() == 0) | 
| 979           selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |  | 
| 980         } |  | 
| 981         else |  | 
| 982         { |  | 
| 983           provider.waitForReady(); |  | 
| 984           String[] referrers = new String[] |  | 
| 985             { |  | 
| 986               url |  | 
| 987             }; |  | 
| 988 |  | 
| 989           List<Subscription> subscriptions = provider |  | 
| 990             .getEngine() |  | 
| 991             .getFilterEngine() |  | 
| 992             .getListedSubscriptions(); |  | 
| 993 |  | 
| 994           try |  | 
| 995           { | 982           { | 
| 996             d("Listed subscriptions: " + subscriptions.size()); | 983             w("FilterEngine already disposed"); | 
| 997             if (debugMode) |  | 
| 998             { |  | 
| 999               for (Subscription eachSubscription : subscriptions) |  | 
| 1000               { |  | 
| 1001                 d("Subscribed to " |  | 
| 1002                   + (eachSubscription.isDisabled() ? "disabled" : "enabled") |  | 
| 1003                   + " " + eachSubscription); |  | 
| 1004               } |  | 
| 1005             } |  | 
| 1006           } |  | 
| 1007           finally |  | 
| 1008           { |  | 
| 1009             for (Subscription eachSubscription : subscriptions) |  | 
| 1010             { |  | 
| 1011               eachSubscription.dispose(); |  | 
| 1012             } |  | 
| 1013           } |  | 
| 1014 |  | 
| 1015           final String domain = provider.getEngine().getFilterEngine().getHostFr
      omURL(url); |  | 
| 1016           if (domain == null) |  | 
| 1017           { |  | 
| 1018             e("Failed to extract domain from " + url); |  | 
| 1019             selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; | 984             selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; | 
| 1020           } | 985           } | 
| 1021           else | 986           else | 
| 1022           { | 987           { | 
| 1023             d("Requesting elemhide selectors from AdblockEngine for " + url + " 
      in " + this); | 988             provider.waitForReady(); | 
| 1024             List<String> selectors = provider | 989             String[] referrers = new String[] | 
|  | 990               { | 
|  | 991                 url | 
|  | 992               }; | 
|  | 993 | 
|  | 994             List<Subscription> subscriptions = provider | 
| 1025               .getEngine() | 995               .getEngine() | 
| 1026               .getElementHidingSelectors(url, domain, referrers); | 996               .getFilterEngine() | 
|  | 997               .getListedSubscriptions(); | 
| 1027 | 998 | 
| 1028             d("Finished requesting elemhide selectors, got " + selectors.size() 
      + " in " + this); | 999             try | 
| 1029             selectorsString = Utils.stringListToJsonArray(selectors); | 1000             { | 
|  | 1001               d("Listed subscriptions: " + subscriptions.size()); | 
|  | 1002               if (debugMode) | 
|  | 1003               { | 
|  | 1004                 for (Subscription eachSubscription : subscriptions) | 
|  | 1005                 { | 
|  | 1006                   d("Subscribed to " | 
|  | 1007                     + (eachSubscription.isDisabled() ? "disabled" : "enabled") | 
|  | 1008                     + " " + eachSubscription); | 
|  | 1009                 } | 
|  | 1010               } | 
|  | 1011             } | 
|  | 1012             finally | 
|  | 1013             { | 
|  | 1014               for (Subscription eachSubscription : subscriptions) | 
|  | 1015               { | 
|  | 1016                 eachSubscription.dispose(); | 
|  | 1017               } | 
|  | 1018             } | 
|  | 1019 | 
|  | 1020             final String domain = provider.getEngine().getFilterEngine().getHost
      FromURL(url); | 
|  | 1021             if (domain == null) | 
|  | 1022             { | 
|  | 1023               e("Failed to extract domain from " + url); | 
|  | 1024               selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; | 
|  | 1025             } | 
|  | 1026             else | 
|  | 1027             { | 
|  | 1028               d("Requesting elemhide selectors from AdblockEngine for " + url + 
      " in " + this); | 
|  | 1029               List<String> selectors = provider | 
|  | 1030                 .getEngine() | 
|  | 1031                 .getElementHidingSelectors(url, domain, referrers); | 
|  | 1032 | 
|  | 1033               d("Finished requesting elemhide selectors, got " + selectors.size(
      ) + " in " + this); | 
|  | 1034               selectorsString = Utils.stringListToJsonArray(selectors); | 
|  | 1035             } | 
| 1030           } | 1036           } | 
| 1031         } | 1037         } | 
| 1032       } | 1038         finally | 
| 1033       finally |  | 
| 1034       { |  | 
| 1035         if (isCancelled.get()) |  | 
| 1036         { | 1039         { | 
| 1037           w("This thread is cancelled, exiting silently " + this); | 1040           if (isCancelled.get()) | 
| 1038         } | 1041           { | 
| 1039         else | 1042             w("This thread is cancelled, exiting silently " + this); | 
| 1040         { | 1043           } | 
| 1041           finish(selectorsString); | 1044           else | 
|  | 1045           { | 
|  | 1046             finish(selectorsString); | 
|  | 1047           } | 
| 1042         } | 1048         } | 
| 1043       } | 1049       } | 
| 1044     } | 1050     } | 
| 1045 | 1051 | 
| 1046     private void onFinished() | 1052     private void onFinished() | 
| 1047     { | 1053     { | 
| 1048       finishedLatch.countDown(); | 1054       finishedLatch.countDown(); | 
| 1049       synchronized (finishedRunnableLockObject) | 1055       synchronized (finishedRunnableLockObject) | 
| 1050       { | 1056       { | 
| 1051         if (finishedRunnable != null) | 1057         if (finishedRunnable != null) | 
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1432         w("Busy with elemhide selectors, delayed disposing scheduled"); | 1438         w("Busy with elemhide selectors, delayed disposing scheduled"); | 
| 1433         elemHideThread.setFinishedRunnable(disposeRunnable); | 1439         elemHideThread.setFinishedRunnable(disposeRunnable); | 
| 1434       } | 1440       } | 
| 1435       else | 1441       else | 
| 1436       { | 1442       { | 
| 1437         disposeRunnable.run(); | 1443         disposeRunnable.run(); | 
| 1438       } | 1444       } | 
| 1439     } | 1445     } | 
| 1440   } | 1446   } | 
| 1441 } | 1447 } | 
| OLD | NEW | 
|---|