You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by lu...@apache.org on 2019/05/08 08:57:43 UTC

[incubator-weex] branch master updated: [iOS] export eagle exception (#2402)

This is an automated email from the ASF dual-hosted git repository.

luckychen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 650cb5b  [iOS] export eagle exception (#2402)
650cb5b is described below

commit 650cb5b12abbd6033c0036e7a3d9c60e3b6d04e9
Author: jianhan-he <41...@users.noreply.github.com>
AuthorDate: Wed May 8 16:57:35 2019 +0800

    [iOS] export eagle exception (#2402)
---
 ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m  | 45 +++++++++++++++--------
 ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm    |  2 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h       |  3 +-
 ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m       |  2 +
 ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m | 30 ++++++++++-----
 ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m     |  8 ++--
 6 files changed, 60 insertions(+), 30 deletions(-)

diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index a4b6cf5..cda394e 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -154,9 +154,12 @@ _Pragma("clang diagnostic pop") \
         }
         else {
             WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId];
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            instance.onFailed(error);
+            WXComponentManager *manager = instance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
         }
         return 0;
     }];
@@ -429,9 +432,12 @@ _Pragma("clang diagnostic pop") \
             });
         }
         else {
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            sdkInstance.onFailed(error);
+            WXComponentManager *manager = sdkInstance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
         }
         WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
         [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
@@ -604,9 +610,12 @@ _Pragma("clang diagnostic pop") \
             });
         }
         else {
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            sdkInstance.onFailed(error);
+            WXComponentManager *manager = sdkInstance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
         }
         WX_MONITOR_INSTANCE_PERF_END(WXPTJSCreateInstance, [WXSDKManager instanceForID:instanceIdString]);
         [sdkInstance.apmInstance onStage:KEY_PAGE_STAGES_LOAD_BUNDLE_END];
@@ -739,9 +748,12 @@ _Pragma("clang diagnostic pop") \
             });
         }
         else {
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            sdkInstance.onFailed(error);
+            WXComponentManager *manager = sdkInstance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
         }
     } else {
         [self callJSMethod:@"destroyInstance" args:@[instance]];
@@ -766,9 +778,12 @@ _Pragma("clang diagnostic pop") \
     WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
     if (sdkInstance.dataRender) {
         if (!_dataRenderHandler) {
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            sdkInstance.onFailed(error);
+            WXComponentManager *manager = sdkInstance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
             return;
         }
         WXPerformBlockOnComponentThread(^{
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
index e39c901..b5f9949 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm
@@ -135,7 +135,7 @@ namespace WeexCore
             WXSDKErrCode errorCode = WX_ERR_JS_EXECUTE;
             BOOL is_render_failed = NO;
             if (func && (strcmp(func, "CreatePageWithContent") == 0 || strcmp(func, "UpdateComponentData") == 0)) {
-                errorCode = WX_ERR_EAGLE_RENDER;
+                errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
                 WXComponentManager *manager = instance.componentManager;
                 if (manager.isValid) {
                     NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":[NSString stringWithUTF8String:exception], @"exception function:":@(func)}];
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
index 689b046..a17e95e 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
@@ -55,7 +55,6 @@ typedef NS_ENUM(int, WXSDKErrCode)
     WX_ERR_RENDER_REMOVEEVENT = -2107,
     WX_ERR_RENDER_SCROLLTOELEMENT = -2110,
     WX_ERR_RENDER_TWICE = -2111,
-    WX_ERR_EAGLE_RENDER = -2112,
     WX_ERR_RENDER_END = -2199,
     
     WX_ERR_DOWNLOAD_START = -2201,
@@ -76,6 +75,8 @@ typedef NS_ENUM(int, WXSDKErrCode)
     WX_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR = -9502,
     WX_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE = -9503,
     WX_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE = -9504,
+    WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR = -9505,
+    WX_KEY_EXCEPTION_DEGRADE_EAGLE_JS_DOWNLOAD_ERROR = -9506,
     
     WX_KEY_EXCEPTION_ABILITY_DOWN = -9600,
     WX_KEY_EXCEPTION_ABILITY_DOWN_IMAGE = -9601,
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m
index 5199bf2..4eeef3d 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.m
@@ -92,6 +92,8 @@
                 @(WX_KEY_EXCEPTION_DEGRADE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
                 @(WX_KEY_EXCEPTION_DEGRADE_CHECK_CONTENT_LENGTH_FAILED):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET)},
                 @(WX_KEY_EXCEPTION_DEGRADE_BUNDLE_CONTENTTYPE_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET)},
+                @(WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_JS)},
+                @(WX_KEY_EXCEPTION_DEGRADE_EAGLE_JS_DOWNLOAD_ERROR):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_JS)},
                 @(WX_KEY_EXCEPTION_DEGRADE_OTHER_CAUSE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NATIVE)},
                 @(WX_KEY_EXCEPTION_DEGRADE_NET_CODE_CAUSE):@{ERROR_TYPE:@(WX_DEGRADE_ERROR),ERROR_GROUP:@(WX_NET)},
                 
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
index 78cd4cd..f9ed2c8 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
@@ -24,6 +24,7 @@
 #import "WXBridgeMethod.h"
 #import "WXCallJSMethod.h"
 #import "WXSDKManager.h"
+#import "WXSDKInstance_private.h"
 #import "WXServiceFactory.h"
 #import "WXResourceRequest.h"
 #import "WXResourceLoader.h"
@@ -322,10 +323,13 @@ void WXPerformBlockSyncOnBridgeThread(void (^block) (void))
         }
 
         WXSDKInstance *sdkInstance = [WXSDKManager instanceForID:instance];
-        NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ occurs an error:%@, info:%@", request.URL, loadError.localizedDescription, loadError.userInfo];
-        WXSDKErrCode errorCode = WX_KEY_EXCEPTION_JS_DOWNLOAD;
-        NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{NSLocalizedDescriptionKey:(errorMessage?:@"No message")}];
-        sdkInstance.onFailed(error);
+        WXComponentManager *manager = sdkInstance.componentManager;
+        if (manager.isValid) {
+            NSString *errorMessage = [NSString stringWithFormat:@"Request to %@ occurs an error:%@, info:%@", request.URL, loadError.localizedDescription, loadError.userInfo];
+            WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_JS_DOWNLOAD_ERROR;
+            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{NSLocalizedDescriptionKey:(errorMessage?:@"No message")}];
+            [manager renderFailed:error];
+        }
     };
 
    [jsLoader start];
@@ -435,9 +439,12 @@ void WXPerformBlockSyncOnBridgeThread(void (^block) (void))
             });
         }
         else {
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            instance.onFailed(error);
+            WXComponentManager *manager = instance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
         }
         return;
     }
@@ -510,9 +517,12 @@ void WXPerformBlockSyncOnBridgeThread(void (^block) (void))
             });
         }
         else {
-            WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-            NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-            instance.onFailed(error);
+            WXComponentManager *manager = instance.componentManager;
+            if (manager.isValid) {
+                WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                [manager renderFailed:error];
+            }
         }
     }
     else {
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index 2ed9999..46ec964 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -287,9 +287,11 @@ typedef enum : NSUInteger {
                 });
             }
             else {
-                WXSDKErrCode errorCode = WX_ERR_EAGLE_RENDER;
-                NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
-                self.onFailed(error);
+                if (self.componentManager.isValid) {
+                    WXSDKErrCode errorCode = WX_KEY_EXCEPTION_DEGRADE_EAGLE_RENDER_ERROR;
+                    NSError *error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:errorCode userInfo:@{@"message":@"No data render handler found!"}];
+                    [self.componentManager renderFailed:error];
+                }
             }
             return;
         }