|
5 | 5 | import android.text.TextUtils; |
6 | 6 | import android.webkit.JavascriptInterface; |
7 | 7 | import android.webkit.ValueCallback; |
8 | | -import android.webkit.WebView; |
9 | 8 |
|
10 | 9 | import com.google.gson.Gson; |
11 | 10 | import com.google.gson.GsonBuilder; |
@@ -36,11 +35,11 @@ private static class CallBackHandler extends Handler { |
36 | 35 | private Map<String, BridgeHandler> registerHandlerMap; |
37 | 36 | private Map<String, ResultCallBack> jsCallbackMap; |
38 | 37 | private CallBackHandler callBackHandler; |
39 | | - private SoftReference<WebView> bridgeWebView; |
| 38 | + private SoftReference<EasyBridgeWebView> bridgeWebView; |
40 | 39 | private String bridgeName; |
41 | 40 | private static long uniqueId = 1; |
42 | 41 |
|
43 | | - EasyBridge(WebView webView, String bridgeName) { |
| 42 | + EasyBridge(EasyBridgeWebView webView, String bridgeName) { |
44 | 43 | this.bridgeName = bridgeName; |
45 | 44 | registerHandlerMap = new HashMap<>(); |
46 | 45 | jsCallbackMap = new HashMap<>(); |
@@ -74,6 +73,12 @@ public void onResult(Object result) { |
74 | 73 | callBack.onResult(CallBackMessage.generateErrorMessage(CallBackMessage.CODE_NO_HANDLER, "handler with name " + handlerName + " is not registered in Java code")); |
75 | 74 | return; |
76 | 75 | } |
| 76 | + // global security check |
| 77 | + if (!checkGlobalSecurity(currentPageUrl, parameters)) { |
| 78 | + callBack.onResult(CallBackMessage.generateErrorMessage(CODE_SECURITY_FORBIDDEN, "handler with name " + handlerName + " is not allowed to invoke in page:" + currentPageUrl + " by the global Security Checker")); |
| 79 | + return; |
| 80 | + } |
| 81 | + // handler security check |
77 | 82 | if (handler.securityPolicyChecker() != null && !handler.securityPolicyChecker().check(currentPageUrl, parameters)) { |
78 | 83 | callBack.onResult(CallBackMessage.generateErrorMessage(CODE_SECURITY_FORBIDDEN, "handler with name " + handlerName + " is not allowed to invoke in page:" + currentPageUrl)); |
79 | 84 | return; |
@@ -173,6 +178,15 @@ private BridgeHandler findTargetHandler(String handlerName) { |
173 | 178 | return null; |
174 | 179 | } |
175 | 180 |
|
| 181 | + private boolean checkGlobalSecurity(String url, String parameters) { |
| 182 | + //can not reach the policyChecker,return true directly |
| 183 | + if (bridgeWebView == null || bridgeWebView.get() == null || bridgeWebView.get().policyChecker == null) { |
| 184 | + return true; |
| 185 | + } |
| 186 | + SecurityPolicyChecker checker = bridgeWebView.get().policyChecker; |
| 187 | + return checker.check(url, parameters); |
| 188 | + } |
| 189 | + |
176 | 190 | void registerHandler(BridgeHandler handler) { |
177 | 191 | if (handler == null || TextUtils.isEmpty(handler.getHandlerName())) { |
178 | 192 | return; |
|
0 commit comments