OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <http://adblockplus.org/>, |
3 * Copyright (C) 2006-2014 Eyeo GmbH | 3 * Copyright (C) 2006-2014 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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 private Subscription[] subscriptions; | 86 private Subscription[] subscriptions; |
87 /** | 87 /** |
88 * Indicates whether filtering is enabled or not. | 88 * Indicates whether filtering is enabled or not. |
89 */ | 89 */ |
90 private boolean filteringEnabled = false; | 90 private boolean filteringEnabled = false; |
91 | 91 |
92 private ABPEngine abpEngine; | 92 private ABPEngine abpEngine; |
93 | 93 |
94 private static AdblockPlus instance; | 94 private static AdblockPlus instance; |
95 | 95 |
96 private static class ReferrerMappingCache extends LinkedHashMap<String, String
> | 96 private final ReferrerMapping referrerMapping = new ReferrerMapping(); |
97 { | |
98 private static final long serialVersionUID = 1L; | |
99 private static final int MAX_SIZE = 5000; | |
100 | |
101 public ReferrerMappingCache() | |
102 { | |
103 super(MAX_SIZE + 1, 0.75f, true); | |
104 } | |
105 | |
106 @Override | |
107 protected boolean removeEldestEntry(final Map.Entry<String, String> eldest) | |
108 { | |
109 return size() > MAX_SIZE; | |
110 } | |
111 }; | |
112 | |
113 private final ReferrerMappingCache referrerMapping = new ReferrerMappingCache(
); | |
114 | 97 |
115 /** | 98 /** |
116 * Returns pointer to itself (singleton pattern). | 99 * Returns pointer to itself (singleton pattern). |
117 */ | 100 */ |
118 public static AdblockPlus getApplication() | 101 public static AdblockPlus getApplication() |
119 { | 102 { |
120 return instance; | 103 return instance; |
121 } | 104 } |
122 | 105 |
123 public int getBuildNumber() | 106 public int getBuildNumber() |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 * Request referrer header | 335 * Request referrer header |
353 * @param accept | 336 * @param accept |
354 * Request accept header | 337 * Request accept header |
355 * @return true if matched filter was found | 338 * @return true if matched filter was found |
356 * @throws Exception | 339 * @throws Exception |
357 */ | 340 */ |
358 public boolean matches(final String url, final String query, final String refe
rrer, final String accept) | 341 public boolean matches(final String url, final String query, final String refe
rrer, final String accept) |
359 { | 342 { |
360 final String fullUrl = !"".equals(query) ? url + "?" + query : url; | 343 final String fullUrl = !"".equals(query) ? url + "?" + query : url; |
361 if (referrer != null) | 344 if (referrer != null) |
362 referrerMapping.put(fullUrl, referrer); | 345 referrerMapping.add(fullUrl, referrer); |
363 | 346 |
364 if (!filteringEnabled) | 347 if (!filteringEnabled) |
365 return false; | 348 return false; |
366 | 349 |
367 String contentType = null; | 350 String contentType = null; |
368 | 351 |
369 if (accept != null) | 352 if (accept != null) |
370 { | 353 { |
371 if (accept.contains("text/css")) | 354 if (accept.contains("text/css")) |
372 contentType = "STYLESHEET"; | 355 contentType = "STYLESHEET"; |
(...skipping 12 matching lines...) Expand all Loading... |
385 else if (RE_IMAGE.matcher(url).find()) | 368 else if (RE_IMAGE.matcher(url).find()) |
386 contentType = "IMAGE"; | 369 contentType = "IMAGE"; |
387 else if (RE_FONT.matcher(url).find()) | 370 else if (RE_FONT.matcher(url).find()) |
388 contentType = "FONT"; | 371 contentType = "FONT"; |
389 else if (RE_HTML.matcher(url).find()) | 372 else if (RE_HTML.matcher(url).find()) |
390 contentType = "SUBDOCUMENT"; | 373 contentType = "SUBDOCUMENT"; |
391 } | 374 } |
392 if (contentType == null) | 375 if (contentType == null) |
393 contentType = "OTHER"; | 376 contentType = "OTHER"; |
394 | 377 |
395 final List<String> referrerChain = buildReferrerChain(referrer); | 378 final List<String> referrerChain = referrerMapping.buildReferrerChain(referr
er); |
396 Log.d("Referrer chain", fullUrl + ": " + referrerChain.toString()); | 379 Log.d("Referrer chain", fullUrl + ": " + referrerChain.toString()); |
397 final String[] referrerChainArray = referrerChain.toArray(new String[referre
rChain.size()]); | 380 final String[] referrerChainArray = referrerChain.toArray(new String[referre
rChain.size()]); |
398 return abpEngine.matches(fullUrl, contentType, referrerChainArray); | 381 return abpEngine.matches(fullUrl, contentType, referrerChainArray); |
399 } | 382 } |
400 | 383 |
401 private List<String> buildReferrerChain(String url) | |
402 { | |
403 final List<String> referrerChain = new ArrayList<String>(); | |
404 // We need to limit the chain length to ensure we don't block indefinitely i
f there's | |
405 // a referrer loop. | |
406 final int maxChainLength = 10; | |
407 for (int i = 0; i < maxChainLength && url != null; i++) | |
408 { | |
409 referrerChain.add(0, url); | |
410 url = referrerMapping.get(url); | |
411 } | |
412 return referrerChain; | |
413 } | |
414 | |
415 /** | 384 /** |
416 * Checks if filtering is enabled. | 385 * Checks if filtering is enabled. |
417 */ | 386 */ |
418 public boolean isFilteringEnabled() | 387 public boolean isFilteringEnabled() |
419 { | 388 { |
420 return filteringEnabled; | 389 return filteringEnabled; |
421 } | 390 } |
422 | 391 |
423 /** | 392 /** |
424 * Enables or disables filtering. | 393 * Enables or disables filtering. |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
536 Log.e(TAG, e.getMessage(), e); | 505 Log.e(TAG, e.getMessage(), e); |
537 } | 506 } |
538 | 507 |
539 // Set crash handler | 508 // Set crash handler |
540 Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(this)); | 509 Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(this)); |
541 | 510 |
542 // Initiate update check | 511 // Initiate update check |
543 scheduleUpdater(0); | 512 scheduleUpdater(0); |
544 } | 513 } |
545 } | 514 } |
OLD | NEW |