From b5dd77c8df84b83fefb38ebd2c3454eceaf4003d Mon Sep 17 00:00:00 2001 From: chen Date: Thu, 9 May 2019 17:14:50 +0800 Subject: [PATCH] [Android] feature : check bundle_type and report error (#2424) --- .../main/java/com/taobao/weex/WXHttpListener.java | 4 ++++ .../java/com/taobao/weex/bridge/RequestHandler.java | 12 ++++++++++++ .../java/com/taobao/weex/bridge/WXBridgeManager.java | 9 +++++++++ .../java/com/taobao/weex/common/WXErrorCode.java | 1 + 4 files changed, 26 insertions(+) diff --git a/android/sdk/src/main/java/com/taobao/weex/WXHttpListener.java b/android/sdk/src/main/java/com/taobao/weex/WXHttpListener.java index 4e10863e2c..40596696be 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXHttpListener.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXHttpListener.java @@ -89,6 +89,10 @@ public void setSDKInstance(WXSDKInstance instance) { this.instance = instance; } + protected WXSDKInstance getInstance() { + return instance; + } + @Override public void onHttpStart() { if (this.instance != null diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/RequestHandler.java b/android/sdk/src/main/java/com/taobao/weex/bridge/RequestHandler.java index 8f1df48660..9e4b99ae92 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/RequestHandler.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/RequestHandler.java @@ -31,9 +31,12 @@ import com.taobao.weex.adapter.URIAdapter; import com.taobao.weex.base.CalledByNative; import com.taobao.weex.bridge.WXBridgeManager.BundType; +import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.common.WXRequest; import com.taobao.weex.common.WXResponse; import com.taobao.weex.http.WXHttpUtil; +import com.taobao.weex.utils.WXExceptionUtils; + import java.util.HashMap; public class RequestHandler { @@ -91,6 +94,15 @@ public void onSuccess(WXResponse response) { String script = new String(response.originalData); BundType bundleType = WXBridgeManager.getInstance().getBundleType("", script); String bundleTypeStr = bundleType == null ? "Others" : bundleType.toString(); + if ("Others".equalsIgnoreCase(bundleTypeStr) && null != getInstance()){ + WXExceptionUtils.commitCriticalExceptionRT( + getInstance().getInstanceId(), + WXErrorCode.WX_KEY_EXCEPTION_NO_BUNDLE_TYPE, + "RequestHandler.onSuccess", + "eagle ->" +WXErrorCode.WX_KEY_EXCEPTION_NO_BUNDLE_TYPE.getErrorMsg(), + null + ); + } nativeInvokeOnSuccess(sNativeCallback, script, bundleTypeStr); } diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java index 98bdcd1c71..21ec436879 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java @@ -1618,6 +1618,15 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa } return; } else { + //bad case for js bundle with out bundletype header //vue or rax + WXExceptionUtils.commitCriticalExceptionRT( + instance.getInstanceId(), + WXErrorCode.WX_KEY_EXCEPTION_NO_BUNDLE_TYPE, + "invokeCreateInstance", + WXErrorCode.WX_KEY_EXCEPTION_NO_BUNDLE_TYPE.getErrorMsg(), + null + ); + invokeExecJS(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args, false); return; } diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java index 8f97699594..52f9c14fff 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java @@ -222,6 +222,7 @@ public enum WXErrorCode { WX_RENDER_ERR_TEXTURE_SETBACKGROUND("-9620", "WX_RENDER_ERR_TEXTURE_SETBACKGROUND", ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_NO_BUNDLE_TYPE("-9801", "Fatal Error : No bundle type in js bundle head, cause white screen or memory leak!!", ErrorType.JS_ERROR, ErrorGroup.JS), /** * degrade code. */