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 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 private boolean adblockEnabled = true; | 98 private boolean adblockEnabled = true; |
99 private boolean debugMode; | 99 private boolean debugMode; |
100 private AdblockEngineProvider provider; | 100 private AdblockEngineProvider provider; |
101 private Integer loadError; | 101 private Integer loadError; |
102 private int allowDrawDelay = ALLOW_DRAW_DELAY; | 102 private int allowDrawDelay = ALLOW_DRAW_DELAY; |
103 private WebChromeClient extWebChromeClient; | 103 private WebChromeClient extWebChromeClient; |
104 private WebViewClient extWebViewClient; | 104 private WebViewClient extWebViewClient; |
105 private WebViewClient intWebViewClient; | 105 private WebViewClient intWebViewClient; |
106 private Map<String, String> url2Referrer = Collections.synchronizedMap(new Has
hMap<String, String>()); | 106 private Map<String, String> url2Referrer = Collections.synchronizedMap(new Has
hMap<String, String>()); |
107 private String url; | 107 private String url; |
108 private String domain; | |
109 private String injectJs; | 108 private String injectJs; |
110 private CountDownLatch elemHideLatch; | 109 private CountDownLatch elemHideLatch; |
111 private String elemHideSelectorsString; | 110 private String elemHideSelectorsString; |
112 private Object elemHideThreadLockObject = new Object(); | 111 private Object elemHideThreadLockObject = new Object(); |
113 private ElemHideThread elemHideThread; | 112 private ElemHideThread elemHideThread; |
114 private boolean loading; | 113 private boolean loading; |
115 private volatile boolean elementsHidden = false; | 114 private volatile boolean elementsHidden = false; |
116 private final Handler handler = new Handler(); | 115 private final Handler handler = new Handler(); |
117 | 116 |
118 // used to prevent user see flickering for elements to hide | 117 // used to prevent user see flickering for elements to hide |
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
820 boolean isXmlHttpRequest, String[] referrerChainArray) | 819 boolean isXmlHttpRequest, String[] referrerChainArray) |
821 { | 820 { |
822 // if dispose() was invoke, but the page is still loading then just let it
go | 821 // if dispose() was invoke, but the page is still loading then just let it
go |
823 if (provider.getCounter() == 0) | 822 if (provider.getCounter() == 0) |
824 { | 823 { |
825 e("FilterEngine already disposed, allow loading"); | 824 e("FilterEngine already disposed, allow loading"); |
826 | 825 |
827 // allow loading by returning null | 826 // allow loading by returning null |
828 return null; | 827 return null; |
829 } | 828 } |
| 829 else |
| 830 { |
| 831 provider.waitForReady(); |
| 832 } |
830 | 833 |
831 if (isMainFrame) | 834 if (isMainFrame) |
832 { | 835 { |
833 // never blocking main frame requests, just subrequests | 836 // never blocking main frame requests, just subrequests |
834 w(url + " is main frame, allow loading"); | 837 w(url + " is main frame, allow loading"); |
835 | 838 |
836 // allow loading by returning null | 839 // allow loading by returning null |
837 return null; | 840 return null; |
838 } | 841 } |
839 | 842 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
970 { | 973 { |
971 try | 974 try |
972 { | 975 { |
973 if (provider.getCounter() == 0) | 976 if (provider.getCounter() == 0) |
974 { | 977 { |
975 w("FilterEngine already disposed"); | 978 w("FilterEngine already disposed"); |
976 selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; | 979 selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |
977 } | 980 } |
978 else | 981 else |
979 { | 982 { |
| 983 provider.waitForReady(); |
980 String[] referrers = new String[] | 984 String[] referrers = new String[] |
981 { | 985 { |
982 url | 986 url |
983 }; | 987 }; |
984 | 988 |
985 List<Subscription> subscriptions = provider | 989 List<Subscription> subscriptions = provider |
986 .getEngine() | 990 .getEngine() |
987 .getFilterEngine() | 991 .getFilterEngine() |
988 .getListedSubscriptions(); | 992 .getListedSubscriptions(); |
989 | 993 |
(...skipping 11 matching lines...) Expand all Loading... |
1001 } | 1005 } |
1002 } | 1006 } |
1003 finally | 1007 finally |
1004 { | 1008 { |
1005 for (Subscription eachSubscription : subscriptions) | 1009 for (Subscription eachSubscription : subscriptions) |
1006 { | 1010 { |
1007 eachSubscription.dispose(); | 1011 eachSubscription.dispose(); |
1008 } | 1012 } |
1009 } | 1013 } |
1010 | 1014 |
1011 d("Requesting elemhide selectors from AdblockEngine for " + url + " in
" + this); | 1015 String domain = provider.getEngine().getFilterEngine().getHostFromURL(
url); |
1012 List<String> selectors = provider | 1016 if (domain == null) |
1013 .getEngine() | 1017 { |
1014 .getElementHidingSelectors(url, domain, referrers); | 1018 e("Failed to extract domain from " + url); |
| 1019 selectorsString = EMPTY_ELEMHIDE_ARRAY_STRING; |
| 1020 } |
| 1021 else |
| 1022 { |
| 1023 d("Requesting elemhide selectors from AdblockEngine for " + url + "
in " + this); |
| 1024 List<String> selectors = provider |
| 1025 .getEngine() |
| 1026 .getElementHidingSelectors(url, domain, referrers); |
1015 | 1027 |
1016 d("Finished requesting elemhide selectors, got " + selectors.size() +
" in " + this); | 1028 d("Finished requesting elemhide selectors, got " + selectors.size()
+ " in " + this); |
1017 selectorsString = Utils.stringListToJsonArray(selectors); | 1029 selectorsString = Utils.stringListToJsonArray(selectors); |
| 1030 } |
1018 } | 1031 } |
1019 } | 1032 } |
1020 finally | 1033 finally |
1021 { | 1034 { |
1022 if (isCancelled.get()) | 1035 if (isCancelled.get()) |
1023 { | 1036 { |
1024 w("This thread is cancelled, exiting silently " + this); | 1037 w("This thread is cancelled, exiting silently " + this); |
1025 } | 1038 } |
1026 else | 1039 else |
1027 { | 1040 { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1112 d("Start loading " + newUrl); | 1125 d("Start loading " + newUrl); |
1113 | 1126 |
1114 loading = true; | 1127 loading = true; |
1115 addDomListener = true; | 1128 addDomListener = true; |
1116 elementsHidden = false; | 1129 elementsHidden = false; |
1117 loadError = null; | 1130 loadError = null; |
1118 url = newUrl; | 1131 url = newUrl; |
1119 | 1132 |
1120 if (url != null) | 1133 if (url != null) |
1121 { | 1134 { |
1122 try | |
1123 { | |
1124 d("Waiting for adblock engine"); | |
1125 provider.waitForReady(); | |
1126 | |
1127 domain = provider.getEngine().getFilterEngine().getHostFromURL(url); | |
1128 if (domain == null) | |
1129 { | |
1130 throw new RuntimeException("Failed to extract domain from " + url); | |
1131 } | |
1132 | |
1133 d("Extracted domain " + domain + " from " + url); | |
1134 } | |
1135 catch (Throwable t) | |
1136 { | |
1137 e("Failed to extract domain from " + url, t); | |
1138 } | |
1139 | |
1140 elemHideLatch = new CountDownLatch(1); | 1135 elemHideLatch = new CountDownLatch(1); |
1141 elemHideThread = new ElemHideThread(elemHideLatch); | 1136 elemHideThread = new ElemHideThread(elemHideLatch); |
1142 elemHideThread.setFinishedRunnable(elemHideThreadFinishedRunnable); | 1137 elemHideThread.setFinishedRunnable(elemHideThreadFinishedRunnable); |
1143 elemHideThread.start(); | 1138 elemHideThread.start(); |
1144 } | 1139 } |
1145 else | 1140 else |
1146 { | 1141 { |
1147 elemHideLatch = null; | 1142 elemHideLatch = null; |
1148 } | 1143 } |
1149 } | 1144 } |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1437 w("Busy with elemhide selectors, delayed disposing scheduled"); | 1432 w("Busy with elemhide selectors, delayed disposing scheduled"); |
1438 elemHideThread.setFinishedRunnable(disposeRunnable); | 1433 elemHideThread.setFinishedRunnable(disposeRunnable); |
1439 } | 1434 } |
1440 else | 1435 else |
1441 { | 1436 { |
1442 disposeRunnable.run(); | 1437 disposeRunnable.run(); |
1443 } | 1438 } |
1444 } | 1439 } |
1445 } | 1440 } |
1446 } | 1441 } |
OLD | NEW |