forked from M66B/XPrivacy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathXWebSettings.java
92 lines (76 loc) · 2.81 KB
/
XWebSettings.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package biz.bokhorst.xprivacy;
import java.util.ArrayList;
import java.util.List;
import android.os.Binder;
import android.util.Log;
public class XWebSettings extends XHook {
private Methods mMethod;
private String mClassName;
private XWebSettings(Methods method, String restrictionName, String className) {
super(restrictionName, method.name(), null);
mMethod = method;
mClassName = className;
}
public String getClassName() {
return mClassName;
}
// public static String getDefaultUserAgent(Context context) [17]
// public synchronized int getUserAgent()
// public synchronized String getUserAgentString()
// public synchronized void setUserAgent(int ua)
// public synchronized void setUserAgentString (String ua)
// http://developer.android.com/reference/android/webkit/WebSettings.html
// http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.2_r1/android/webkit/WebSettings.java
private enum Methods {
getDefaultUserAgent, getUserAgent, getUserAgentString, setUserAgent, setUserAgentString
};
public static List<XHook> getInstances(Object instance) {
String className = instance.getClass().getName();
Util.log(null, Log.INFO, "Hooking class=" + className + " uid=" + Binder.getCallingUid());
List<XHook> listHook = new ArrayList<XHook>();
listHook.add(new XWebSettings(Methods.getDefaultUserAgent, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.getUserAgent, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.getUserAgentString, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.setUserAgent, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.setUserAgentString, PrivacyManager.cView, className));
return listHook;
}
@Override
protected void before(XParam param) throws Throwable {
switch (mMethod) {
case getDefaultUserAgent:
int uid = Binder.getCallingUid();
if (getRestricted(uid)) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.setResult(ua);
}
break;
case getUserAgent:
if (isRestricted(param))
param.setResult(-1); // User defined
break;
case getUserAgentString:
if (isRestrictedExtra(param, (String) param.getResult())) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.setResult(ua);
}
break;
case setUserAgent:
if (param.args.length > 0)
if (isRestricted(param))
param.args[0] = -1; // User defined
break;
case setUserAgentString:
if (param.args.length > 0)
if (isRestricted(param)) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.args[0] = ua;
}
break;
}
}
@Override
protected void after(XParam param) throws Throwable {
// Do nothing
}
}