Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/org/adblockplus/android/AdblockPlus.java

Issue 5172657418928128: Determine the frame structure (Closed)
Patch Set: Build referrer chains iteratively and limit their length Created Nov. 27, 2013, 2:47 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/org/adblockplus/android/ABPEngine.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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-2013 Eyeo GmbH 3 * Copyright (C) 2006-2013 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
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 package org.adblockplus.android; 18 package org.adblockplus.android;
19 19
20 import java.io.BufferedReader; 20 import java.io.BufferedReader;
21 import java.io.File; 21 import java.io.File;
22 import java.io.FileNotFoundException; 22 import java.io.FileNotFoundException;
23 import java.io.IOException; 23 import java.io.IOException;
24 import java.io.InputStream; 24 import java.io.InputStream;
25 import java.io.InputStreamReader; 25 import java.io.InputStreamReader;
26 import java.util.ArrayList;
26 import java.util.Calendar; 27 import java.util.Calendar;
28 import java.util.LinkedHashMap;
29 import java.util.List;
30 import java.util.Map;
27 import java.util.TimeZone; 31 import java.util.TimeZone;
28 import java.util.regex.Pattern; 32 import java.util.regex.Pattern;
29 33
30 import org.adblockplus.android.updater.AlarmReceiver; 34 import org.adblockplus.android.updater.AlarmReceiver;
31 35
32 import android.app.ActivityManager; 36 import android.app.ActivityManager;
33 import android.app.ActivityManager.RunningServiceInfo; 37 import android.app.ActivityManager.RunningServiceInfo;
34 import android.app.AlarmManager; 38 import android.app.AlarmManager;
35 import android.app.Application; 39 import android.app.Application;
36 import android.app.PendingIntent; 40 import android.app.PendingIntent;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 private Subscription[] subscriptions; 81 private Subscription[] subscriptions;
78 82
79 /** 83 /**
80 * Indicates whether filtering is enabled or not. 84 * Indicates whether filtering is enabled or not.
81 */ 85 */
82 private boolean filteringEnabled = false; 86 private boolean filteringEnabled = false;
83 87
84 private ABPEngine abpEngine; 88 private ABPEngine abpEngine;
85 89
86 private static AdblockPlus instance; 90 private static AdblockPlus instance;
91
92 private static class ReferrerMappingCache extends LinkedHashMap<String, String >
93 {
94 private static final long serialVersionUID = 1L;
95 private static final int MAX_SIZE = 5000;
96
97 public ReferrerMappingCache()
98 {
99 super(MAX_SIZE + 1, 0.75f, true);
100 }
101
102 @Override
103 protected boolean removeEldestEntry(Map.Entry<String, String> eldest)
104 {
105 return size() > MAX_SIZE;
106 }
107 };
108
109 private ReferrerMappingCache referrerMapping = new ReferrerMappingCache();
87 110
88 /** 111 /**
89 * Returns pointer to itself (singleton pattern). 112 * Returns pointer to itself (singleton pattern).
90 */ 113 */
91 public static AdblockPlus getApplication() 114 public static AdblockPlus getApplication()
92 { 115 {
93 return instance; 116 return instance;
94 } 117 }
95 118
96 public int getBuildNumber() 119 public int getBuildNumber()
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 * Request query string 354 * Request query string
332 * @param referrer 355 * @param referrer
333 * Request referrer header 356 * Request referrer header
334 * @param accept 357 * @param accept
335 * Request accept header 358 * Request accept header
336 * @return true if matched filter was found 359 * @return true if matched filter was found
337 * @throws Exception 360 * @throws Exception
338 */ 361 */
339 public boolean matches(String url, String query, String referrer, String accep t) 362 public boolean matches(String url, String query, String referrer, String accep t)
340 { 363 {
364 if (referrer != null)
365 referrerMapping.put(url, referrer);
366
341 if (!filteringEnabled) 367 if (!filteringEnabled)
342 return false; 368 return false;
343 369
344 String contentType = null; 370 String contentType = null;
345 371
346 if (accept != null) 372 if (accept != null)
347 { 373 {
348 if (accept.contains("text/css")) 374 if (accept.contains("text/css"))
349 contentType = "STYLESHEET"; 375 contentType = "STYLESHEET";
350 else if (accept.contains("image/*")) 376 else if (accept.contains("image/*"))
(...skipping 10 matching lines...) Expand all
361 contentType = "IMAGE"; 387 contentType = "IMAGE";
362 else if (RE_FONT.matcher(url).matches()) 388 else if (RE_FONT.matcher(url).matches())
363 contentType = "FONT"; 389 contentType = "FONT";
364 } 390 }
365 if (contentType == null) 391 if (contentType == null)
366 contentType = "OTHER"; 392 contentType = "OTHER";
367 393
368 if (!"".equals(query)) 394 if (!"".equals(query))
369 url = url + "?" + query; 395 url = url + "?" + query;
370 396
371 return abpEngine.matches(url, contentType, referrer); 397 final List<String> referrerChain = buildReferrerChain(referrer);
398 Log.d("Referrer chain", url + ": " + referrerChain.toString());
399 String[] referrerChainArray = referrerChain.toArray(new String[referrerChain .size()]);
400 return abpEngine.matches(url, contentType, referrerChainArray);
401 }
402
403 private List<String> buildReferrerChain(String url)
404 {
405 final List<String> referrerChain = new ArrayList<String>();
406 // We need to limit the chain length to ensure we don't block indefinitely i f there's
407 // a referrer loop.
408 final int maxChainLength = 10;
409 for (int i = 0; i < maxChainLength && url != null; i++)
410 {
411 referrerChain.add(url);
412 url = referrerMapping.get(url);
413 }
414 return referrerChain;
372 } 415 }
373 416
374 /** 417 /**
375 * Checks if filtering is enabled. 418 * Checks if filtering is enabled.
376 */ 419 */
377 public boolean isFilteringEnabled() 420 public boolean isFilteringEnabled()
378 { 421 {
379 return filteringEnabled; 422 return filteringEnabled;
380 } 423 }
381 424
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 Log.e(TAG, e.getMessage(), e); 539 Log.e(TAG, e.getMessage(), e);
497 } 540 }
498 541
499 // Set crash handler 542 // Set crash handler
500 Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(this)); 543 Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(this));
501 544
502 // Initiate update check 545 // Initiate update check
503 scheduleUpdater(0); 546 scheduleUpdater(0);
504 } 547 }
505 } 548 }
OLDNEW
« no previous file with comments | « src/org/adblockplus/android/ABPEngine.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld