| 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 |