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 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 AdblockEngine.generateAppInfo(this.getContext(), debugMode), | 966 AdblockEngine.generateAppInfo(this.getContext(), debugMode), |
967 this.getContext().getDir(AdblockEngine.BASE_PATH_DIRECTORY, Context.MODE
_PRIVATE).getAbsolutePath()) | 967 this.getContext().getDir(AdblockEngine.BASE_PATH_DIRECTORY, Context.MODE
_PRIVATE).getAbsolutePath()) |
968 .enableElementHiding(true) | 968 .enableElementHiding(true) |
969 .build(); | 969 .build(); |
970 } | 970 } |
971 | 971 |
972 private class ElemHideThread extends Thread | 972 private class ElemHideThread extends Thread |
973 { | 973 { |
974 private String selectorsString; | 974 private String selectorsString; |
975 private CountDownLatch finishedLatch; | 975 private CountDownLatch finishedLatch; |
| 976 private AtomicBoolean isFinished; |
976 private AtomicBoolean isCancelled; | 977 private AtomicBoolean isCancelled; |
977 | 978 |
978 public ElemHideThread(CountDownLatch finishedLatch) | 979 public ElemHideThread(CountDownLatch finishedLatch) |
979 { | 980 { |
980 this.finishedLatch = finishedLatch; | 981 this.finishedLatch = finishedLatch; |
| 982 isFinished = new AtomicBoolean(false); |
981 isCancelled = new AtomicBoolean(false); | 983 isCancelled = new AtomicBoolean(false); |
982 } | 984 } |
983 | 985 |
984 @Override | 986 @Override |
985 public void run() | 987 public void run() |
986 { | 988 { |
987 try | 989 try |
988 { | 990 { |
989 if (adblockEngine == null) | 991 if (adblockEngine == null) |
990 { | 992 { |
(...skipping 30 matching lines...) Expand all Loading... |
1021 } | 1023 } |
1022 | 1024 |
1023 d("Requesting elemhide selectors from AdblockEngine for " + url + " in
" + this); | 1025 d("Requesting elemhide selectors from AdblockEngine for " + url + " in
" + this); |
1024 List<String> selectors = adblockEngine.getElementHidingSelectors(url,
domain, referrers); | 1026 List<String> selectors = adblockEngine.getElementHidingSelectors(url,
domain, referrers); |
1025 d("Finished requesting elemhide selectors, got " + selectors.size() +
" in " + this); | 1027 d("Finished requesting elemhide selectors, got " + selectors.size() +
" in " + this); |
1026 selectorsString = Utils.stringListToJsonArray(selectors); | 1028 selectorsString = Utils.stringListToJsonArray(selectors); |
1027 } | 1029 } |
1028 } | 1030 } |
1029 finally | 1031 finally |
1030 { | 1032 { |
1031 if (!isCancelled.get()) | 1033 if (isCancelled.get()) |
| 1034 { |
| 1035 w("This thread is cancelled, exiting silently " + this); |
| 1036 } |
| 1037 else |
1032 { | 1038 { |
1033 finish(selectorsString); | 1039 finish(selectorsString); |
1034 } | 1040 } |
1035 else | |
1036 { | |
1037 w("This thread is cancelled, exiting silently " + this); | |
1038 } | |
1039 } | 1041 } |
1040 } | 1042 } |
1041 | 1043 |
1042 private void onFinished() | 1044 private void onFinished() |
1043 { | 1045 { |
1044 finishedLatch.countDown(); | 1046 finishedLatch.countDown(); |
1045 synchronized (finishedRunnableLockObject) | 1047 synchronized (finishedRunnableLockObject) |
1046 { | 1048 { |
1047 if (finishedRunnable != null) | 1049 if (finishedRunnable != null) |
1048 { | 1050 { |
1049 finishedRunnable.run(); | 1051 finishedRunnable.run(); |
1050 } | 1052 } |
1051 } | 1053 } |
1052 } | 1054 } |
1053 | 1055 |
1054 private void finish(String result) | 1056 private void finish(String result) |
1055 { | 1057 { |
| 1058 isFinished.set(true); |
1056 d("Setting elemhide string " + result.length() + " bytes"); | 1059 d("Setting elemhide string " + result.length() + " bytes"); |
1057 elemHideSelectorsString = result; | 1060 elemHideSelectorsString = result; |
1058 onFinished(); | 1061 onFinished(); |
1059 } | 1062 } |
1060 | 1063 |
1061 private final Object finishedRunnableLockObject = new Object(); | 1064 private final Object finishedRunnableLockObject = new Object(); |
1062 private Runnable finishedRunnable; | 1065 private Runnable finishedRunnable; |
1063 | 1066 |
1064 public void setFinishedRunnable(Runnable runnable) | 1067 public void setFinishedRunnable(Runnable runnable) |
1065 { | 1068 { |
1066 synchronized (finishedRunnableLockObject) | 1069 synchronized (finishedRunnableLockObject) |
1067 { | 1070 { |
1068 this.finishedRunnable = runnable; | 1071 this.finishedRunnable = runnable; |
1069 } | 1072 } |
1070 } | 1073 } |
1071 | 1074 |
1072 public void cancel() | 1075 public void cancel() |
1073 { | 1076 { |
1074 w("Cancelling elemhide thread " + this); | 1077 w("Cancelling elemhide thread " + this); |
1075 isCancelled.set(true); | 1078 if (isFinished.get()) |
1076 | 1079 { |
1077 finish(EMPTY_ELEMHIDE_ARRAY_STRING); | 1080 w("This thread is finished, exiting silently " + this); |
| 1081 } |
| 1082 else |
| 1083 { |
| 1084 isCancelled.set(true); |
| 1085 finish(EMPTY_ELEMHIDE_ARRAY_STRING); |
| 1086 } |
1078 } | 1087 } |
1079 } | 1088 } |
1080 | 1089 |
1081 private Runnable elemHideThreadFinishedRunnable = new Runnable() | 1090 private Runnable elemHideThreadFinishedRunnable = new Runnable() |
1082 { | 1091 { |
1083 @Override | 1092 @Override |
1084 public void run() | 1093 public void run() |
1085 { | 1094 { |
1086 synchronized (elemHideThreadLockObject) | 1095 synchronized (elemHideThreadLockObject) |
1087 { | 1096 { |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 w("Busy with elemhide selectors, delayed disposing scheduled"); | 1445 w("Busy with elemhide selectors, delayed disposing scheduled"); |
1437 elemHideThread.setFinishedRunnable(disposeRunnable); | 1446 elemHideThread.setFinishedRunnable(disposeRunnable); |
1438 } | 1447 } |
1439 else | 1448 else |
1440 { | 1449 { |
1441 disposeRunnable.run(); | 1450 disposeRunnable.run(); |
1442 } | 1451 } |
1443 } | 1452 } |
1444 } | 1453 } |
1445 } | 1454 } |
OLD | NEW |