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

Side by Side Diff: mobile/android/base/java/org/adblockplus/browser/ExtensionBridge.java

Issue 29863604: Issue 6865 - Update ABP dependency to version 3.2 (Closed)
Patch Set: Removing allowed contexts Created Aug. 28, 2018, 5:08 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
OLDNEW
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 12 matching lines...) Expand all
23 import android.annotation.SuppressLint; 23 import android.annotation.SuppressLint;
24 import android.content.Context; 24 import android.content.Context;
25 import android.content.SharedPreferences; 25 import android.content.SharedPreferences;
26 import android.os.Handler; 26 import android.os.Handler;
27 import android.os.HandlerThread; 27 import android.os.HandlerThread;
28 import android.util.Log; 28 import android.util.Log;
29 29
30 import org.json.JSONArray; 30 import org.json.JSONArray;
31 import org.json.JSONException; 31 import org.json.JSONException;
32 import org.mozilla.gecko.EventDispatcher; 32 import org.mozilla.gecko.EventDispatcher;
33 import org.mozilla.gecko.GeckoAppShell;
34 import org.mozilla.gecko.util.BundleEventListener; 33 import org.mozilla.gecko.util.BundleEventListener;
35 import org.mozilla.gecko.util.EventCallback; 34 import org.mozilla.gecko.util.EventCallback;
36 import org.mozilla.gecko.util.GeckoBundle; 35 import org.mozilla.gecko.util.GeckoBundle;
37 36
38 @SuppressLint("DefaultLocale") 37 @SuppressLint("DefaultLocale")
39 public class AddOnBridge 38 public class ExtensionBridge
40 { 39 {
41 private static final String TAG = "AdblockBrowser.AddOnBridge"; 40 private static final String TAG = "AdblockBrowser.ExtensionBridge";
42 private static final String REQUEST_NAME = "AdblockPlus:Api"; 41 private static final String REQUEST_NAME = "Abb:Api";
43 // Handler+HandlerThread for posting delayed re-tries without interfering with 42 // Handler+HandlerThread for posting delayed re-tries without interfering with
44 // other threads (e.g. the UI or Gecko thread) 43 // other threads (e.g. the UI or Gecko thread)
45 private static final HandlerThread PRIVATE_HANDLER_THREAD; 44 private static final HandlerThread PRIVATE_HANDLER_THREAD;
46 private static final Handler PRIVATE_HANDLER; 45 private static final Handler PRIVATE_HANDLER;
47 // Global handler, for e.g. UI tasks 46 // Global handler, for e.g. UI tasks
48 private static final HandlerThread GLOBAL_HANDLER_THREAD; 47 private static final HandlerThread GLOBAL_HANDLER_THREAD;
49 private static final Handler GLOBAL_HANDLER; 48 private static final Handler GLOBAL_HANDLER;
50 // Sometimes, the app is killed before the extension is able to save all chang es regarding 49 // Sometimes, the app is killed before the extension is able to save all chang es regarding
51 // AddOnBridge requests. Given that, we need to store the pending requests on SharedPrefs, 50 // ExtensionBridge requests. Given that, we need to store the pending requests on SharedPrefs,
52 // so we can resend them to the extension once the app restarts 51 // so we can resend them to the extension once the app restarts
53 // See https://issues.adblockplus.org/ticket/2853 52 // See https://issues.adblockplus.org/ticket/2853
54 private static final AddOnEventListener ADD_ON_EVENT_LISTENER = new AddOnEvent Listener(); 53 private static final AddOnEventListener ADD_ON_EVENT_LISTENER = new AddOnEvent Listener();
55 private static final String ON_FILTERS_LOAD_EVENT = "Abb:OnFiltersLoad"; 54 private static final String ON_LOADED_EVENT = "Abb:OnLoaded";
56 private static final String ON_FILTERS_SAVE_EVENT = "Abb:OnFiltersSave"; 55 private static final String ON_FILTERS_SAVED_EVENT = "Abb:OnFiltersSaved";
57 private static final List<GeckoBundle> PENDING_REQUESTS = new ArrayList<>(); 56 private static final List<GeckoBundle> PENDING_REQUESTS = new ArrayList<>();
58 private static final String PENDING_REQUESTS_PREFS_KEY = "PENDING_REQUESTS_PRE FS_KEY"; 57 private static final String PENDING_REQUESTS_PREFS_KEY = "PENDING_REQUESTS_PRE FS_KEY";
59 58
60 private static SharedPreferences sharedPrefs; 59 private static SharedPreferences sharedPrefs;
61 private static boolean filtersLoaded; 60 private static boolean filtersLoaded;
62 61
63 static 62 static
64 { 63 {
65 PRIVATE_HANDLER_THREAD = new HandlerThread("abp-private-handler"); 64 PRIVATE_HANDLER_THREAD = new HandlerThread("abp-private-handler");
66 PRIVATE_HANDLER_THREAD.setDaemon(true); 65 PRIVATE_HANDLER_THREAD.setDaemon(true);
67 PRIVATE_HANDLER_THREAD.start(); 66 PRIVATE_HANDLER_THREAD.start();
68 PRIVATE_HANDLER = new Handler(PRIVATE_HANDLER_THREAD.getLooper()); 67 PRIVATE_HANDLER = new Handler(PRIVATE_HANDLER_THREAD.getLooper());
69 68
70 GLOBAL_HANDLER_THREAD = new HandlerThread("abp-global-handler"); 69 GLOBAL_HANDLER_THREAD = new HandlerThread("abp-global-handler");
71 GLOBAL_HANDLER_THREAD.setDaemon(true); 70 GLOBAL_HANDLER_THREAD.setDaemon(true);
72 GLOBAL_HANDLER_THREAD.start(); 71 GLOBAL_HANDLER_THREAD.start();
73 GLOBAL_HANDLER = new Handler(GLOBAL_HANDLER_THREAD.getLooper()); 72 GLOBAL_HANDLER = new Handler(GLOBAL_HANDLER_THREAD.getLooper());
74 } 73 }
75 74
76 public static void init(Context context) 75 public static void init(Context context)
77 { 76 {
78 sharedPrefs = context.getSharedPreferences(AddOnBridge.class.getName(), Cont ext.MODE_PRIVATE); 77 sharedPrefs = context.getSharedPreferences(ExtensionBridge.class.getName(), Context.MODE_PRIVATE);
79 EventDispatcher.getInstance().registerGeckoThreadListener( 78 EventDispatcher.getInstance().registerGeckoThreadListener(
80 ADD_ON_EVENT_LISTENER, ON_FILTERS_LOAD_EVENT, ON_FILTERS_SAVE_EVENT); 79 ADD_ON_EVENT_LISTENER, ON_LOADED_EVENT, ON_FILTERS_SAVED_EVENT);
81 loadPendingRequests(); 80 loadPendingRequests();
82 } 81 }
83 82
84 public static void postToHandler(Runnable runnable) 83 public static void postToHandler(Runnable runnable)
85 { 84 {
86 GLOBAL_HANDLER.post(runnable); 85 GLOBAL_HANDLER.post(runnable);
87 } 86 }
88 87
89 public static void postToHandlerDelayed(Runnable runnable, long delayMillis) 88 public static void postToHandlerDelayed(Runnable runnable, long delayMillis)
90 { 89 {
(...skipping 12 matching lines...) Expand all
103 final GeckoBundle data = new GeckoBundle(); 102 final GeckoBundle data = new GeckoBundle();
104 data.putBoolean("enable", enable); 103 data.putBoolean("enable", enable);
105 callFunction("set" + makeFirstCharacterUppercase(name), data, true, callback ); 104 callFunction("set" + makeFirstCharacterUppercase(name), data, true, callback );
106 } 105 }
107 106
108 public static void querySubscriptionListStatus(String url, AdblockPlusApiCallb ack callback) 107 public static void querySubscriptionListStatus(String url, AdblockPlusApiCallb ack callback)
109 { 108 {
110 Log.d(TAG, "querySubscriptionListStatus for " + url); 109 Log.d(TAG, "querySubscriptionListStatus for " + url);
111 final GeckoBundle data = new GeckoBundle(); 110 final GeckoBundle data = new GeckoBundle();
112 data.putString("url", url); 111 data.putString("url", url);
113 callFunction("isSubscriptionListed", data, callback); 112 callFunction("isSubscriptionEnabled", data, callback);
114 } 113 }
115 114
116 public static void addSubscription(String url, String title, AdblockPlusApiCal lback callback) 115 public static void addSubscription(String url, String title, AdblockPlusApiCal lback callback)
117 { 116 {
118 Log.d(TAG, "addSubscription for " + url + " (" + title + ")"); 117 Log.d(TAG, "addSubscription for " + url + " (" + title + ")");
119 final GeckoBundle data = new GeckoBundle(); 118 final GeckoBundle data = new GeckoBundle();
120 data.putString("url", url); 119 data.putString("url", url);
121 if (title != null) 120 if (title != null)
122 { 121 {
123 data.putString("title", title); 122 data.putString("title", title);
124 } 123 }
125 callFunction("addSubscription", data, true, callback); 124 callFunction("addSubscription", data, true, callback);
126 } 125 }
127 126
128 public static void queryActiveSubscriptions(AdblockPlusApiCallback callback) 127 public static void queryActiveSubscriptions(AdblockPlusApiCallback callback)
129 { 128 {
130 Log.d(TAG, "queryActiveSubscriptions"); 129 Log.d(TAG, "queryActiveSubscriptions");
131 callFunction("getActiveSubscriptions", null, callback); 130 callFunction("getEnabledSubscriptions", null, callback);
132 } 131 }
133 132
134 public static void removeSubscription(String url, AdblockPlusApiCallback callb ack) 133 public static void removeSubscription(String url, AdblockPlusApiCallback callb ack)
135 { 134 {
136 Log.d(TAG, "removeSubscription for " + url); 135 Log.d(TAG, "removeSubscription for " + url);
137 final GeckoBundle data = new GeckoBundle(); 136 final GeckoBundle data = new GeckoBundle();
138 data.putString("url", url); 137 data.putString("url", url);
139 callFunction("removeSubscription", data, true, callback); 138 callFunction("removeSubscription", data, true, callback);
140 } 139 }
141 140
142 public static void queryWhitelistedWebsites(final AdblockPlusApiCallback callb ack) { 141 public static void queryWhitelistedWebsites(final AdblockPlusApiCallback callb ack) {
143 Log.d(TAG, "queryWhitelistedWebsites"); 142 Log.d(TAG, "queryWhitelistedWebsites");
144 callFunction("getWhitelistedWebsites", null, callback); 143 callFunction("getWhitelistedDomains", null, callback);
145 } 144 }
146 145
147 public static void queryIsWebsiteWhitelisted(String url, AdblockPlusApiCallbac k callback) 146 public static void queryIsWebsiteWhitelisted(String url, AdblockPlusApiCallbac k callback)
148 { 147 {
149 Log.d(TAG, "queryIsWebsiteWhitelisted for " + url); 148 Log.d(TAG, "queryIsWebsiteWhitelisted for " + url);
150 final GeckoBundle data = new GeckoBundle(); 149 final GeckoBundle data = new GeckoBundle();
151 data.putString("url", url); 150 data.putString("url", url);
152 data.putString("host", UrlUtils.getHostFromUrl(url)); 151 data.putString("host", UrlUtils.getHostFromUrl(url));
153 callFunction("isWebsiteWhitelisted", data, callback); 152 callFunction("isDomainWhitelisted", data, callback);
154 } 153 }
155 154
156 public static void whitelistWebsite(String url, boolean whitelisted, AdblockPl usApiCallback callback) 155 public static void whitelistWebsite(String url, boolean whitelisted, AdblockPl usApiCallback callback)
157 { 156 {
158 Log.d(TAG, "whitelistWebsite for " + url); 157 Log.d(TAG, "whitelistWebsite for " + url);
159 final GeckoBundle data = new GeckoBundle(); 158 final GeckoBundle data = new GeckoBundle();
160 data.putString("url", UrlUtils.formatUrl(url)); 159 data.putString("url", UrlUtils.formatUrl(url));
161 data.putString("host", UrlUtils.getHostFromUrl(url)); 160 data.putString("host", UrlUtils.getHostFromUrl(url));
162 data.putBoolean("whitelisted", whitelisted); 161 data.putBoolean("enable", whitelisted);
163 callFunction("whitelistWebsite", data, true, callback); 162 callFunction("whitelistDomain", data, true, callback);
164 } 163 }
165 164
166 private static String makeFirstCharacterUppercase(String str) 165 private static String makeFirstCharacterUppercase(String str)
167 { 166 {
168 if (Character.isUpperCase(str.charAt(0))) 167 if (Character.isUpperCase(str.charAt(0)))
169 { 168 {
170 return str; 169 return str;
171 } 170 }
172 return Character.toString(Character.toUpperCase(str.charAt(0))) + str.substr ing(1); 171 return Character.toString(Character.toUpperCase(str.charAt(0))) + str.substr ing(1);
173 } 172 }
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 callback.onApiRequestFailed(error); 340 callback.onApiRequestFailed(error);
342 } 341 }
343 }); 342 });
344 } 343 }
345 344
346 private static class AddOnEventListener implements BundleEventListener 345 private static class AddOnEventListener implements BundleEventListener
347 { 346 {
348 @Override 347 @Override
349 public void handleMessage(String event, GeckoBundle message, EventCallback c allback) 348 public void handleMessage(String event, GeckoBundle message, EventCallback c allback)
350 { 349 {
351 if (ON_FILTERS_LOAD_EVENT.equals(event)) 350 Log.d(TAG, "handleMessage event: " + event + " message: " + message);
351 if (ON_LOADED_EVENT.equals(event))
352 { 352 {
353 // The filters have been loaded by the extension. Given that, we can sen d all pending requests 353 // The extension has been loaded. Given that, we can send all pending re quests
354 filtersLoaded = true; 354 filtersLoaded = true;
355 sendPendingRequests(); 355 sendPendingRequests();
356 } 356 }
357 else if (ON_FILTERS_SAVE_EVENT.equals(event)) 357 else if (ON_FILTERS_SAVED_EVENT.equals(event))
358 { 358 {
359 // All changes have been saved by the extension. That way, we can clear our list of 359 // All changes have been saved by the extension. That way, we can clear our list of
360 // pending requests 360 // pending requests
361 // See https://issues.adblockplus.org/ticket/2853 361 // See https://issues.adblockplus.org/ticket/2853
362 clearPendingRequests(); 362 clearPendingRequests();
363 } 363 }
364 } 364 }
365 } 365 }
366 } 366 }
OLDNEW

Powered by Google App Engine
This is Rietveld