You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by GitBox <gi...@apache.org> on 2018/12/20 07:50:06 UTC

[GitHub] YorkShen closed pull request #1943: add Extra options to createInstance

YorkShen closed pull request #1943: add Extra options to createInstance 
URL: https://github.com/apache/incubator-weex/pull/1943
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/android/sdk/libs/armeabi-v7a/libweexjss.so b/android/sdk/libs/armeabi-v7a/libweexjss.so
index 50e261a9c2..8bab6c1f7e 100755
Binary files a/android/sdk/libs/armeabi-v7a/libweexjss.so and b/android/sdk/libs/armeabi-v7a/libweexjss.so differ
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 50e261a9c2..8bab6c1f7e 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
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 83cb7087f6..906664487f 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
@@ -1459,6 +1459,17 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa
         WXJSObject instanceObj = new WXJSObject(WXJSObject.String,
                 template.getContent());
 
+        Object extraOption = null;
+        if(options != null && options.containsKey("extraOption")) {
+           extraOption = options.get("extraOption");
+           options.remove("extraOption");
+        }
+
+        WXJSObject extraOptionObj = new WXJSObject(WXJSObject.JSON,
+                extraOption == null ? "{}"
+                        : WXJsonUtils.fromObjectToJSONString(extraOption));
+
+
         WXJSObject optionsObj = new WXJSObject(WXJSObject.JSON,
                 options == null ? "{}"
                         : WXJsonUtils.fromObjectToJSONString(options));
@@ -1496,7 +1507,7 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa
         }
 
         WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
-                dataObj, apiObj, renderStrategy};
+                dataObj, apiObj, renderStrategy, extraOptionObj};
 
         instance.setTemplate(template.getContent());
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java b/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java
index dc53c134e4..0a42e2e129 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java
@@ -142,18 +142,19 @@ public static void switchInteractionLog(final boolean isOpen){
       }
       sOpenInteractionLog = isOpen;
       //for jsfm && jsengin
-      WXBridgeManager.getInstance().post(new Runnable() {
-          @Override
-          public void run() {
-              WXJSObject[] args = {new WXJSObject(isOpen?1:0)};
-              WXBridgeManager.getInstance().invokeExecJS(
-                  "",
-                  null,
-                  "switchInteractionLog",
-                  args,
-                  false);
-          }
-      });
+      //TODO wait for JSFramework
+//      WXBridgeManager.getInstance().post(new Runnable() {
+//          @Override
+//          public void run() {
+//              WXJSObject[] args = {new WXJSObject(isOpen?1:0)};
+//              WXBridgeManager.getInstance().invokeExecJS(
+//                  "",
+//                  null,
+//                  "switchInteractionLog",
+//                  args,
+//                  false);
+//          }
+//      });
       //for weex_core
       WXBridgeManager.getInstance().registerCoreEnv("switchInteractionLog",String.valueOf(isOpen));
   }
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp
index b1091d3a5c..dbd668ce44 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp
@@ -571,7 +571,7 @@ namespace WeexCore {
 
     int CoreSideInMultiProcess::CreateInstance(const char *instanceId, const char *func,
                                            const char *script, const char *opts,
-                                           const char *initData, const char *extendsApi,
+                                           const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                                            const char* render_strategy) {
         try {
             std::unique_ptr<IPCSerializer> serializer(createIPCSerializer());
@@ -582,7 +582,10 @@ namespace WeexCore {
             serializer->add(opts, strlen(opts));
             serializer->add(initData, strlen(initData));
             serializer->add(extendsApi, strlen(extendsApi));
-
+            for (auto it = params.begin(); it != params.end(); ++it) {
+                serializer->add((*it)->type->content, (*it)->type->length);
+                serializer->add((*it)->value->content, (*it)->value->length);
+            }
             std::unique_ptr<IPCBuffer> buffer = serializer->finish();
             std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
             if (result->getType() != IPCType::INT32) {
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h
index e0fa83621e..809d498c83 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h
@@ -95,7 +95,7 @@ class CoreSideInMultiProcess : public PlatformBridge::CoreSide {
       std::vector<VALUE_WITH_TYPE *> &params) override;
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, const char *opts, const char *initData,
-                     const char *extendsApi,
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                      const char *render_strategy) override;
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
                                const char *script) override;
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp
index 30db5cad03..a627a93563 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp
@@ -205,9 +205,9 @@ std::unique_ptr<WeexJSResult> CoreSideInMultiSo::ExecJSWithResult(
 int CoreSideInMultiSo::CreateInstance(const char *instanceId, const char *func,
                                       const char *script, const char *opts,
                                       const char *initData,
-                                      const char *extendsApi, const char* render_strategy) {
+                                      const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) {
   return core_side_functions_->create_instance(instanceId, func, script, opts,
-                                               initData, extendsApi);
+                                               initData, extendsApi,params);
 }
 
 std::unique_ptr<WeexJSResult> CoreSideInMultiSo::ExecJSOnInstance(const char *instanceId,
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h
index c68e048686..df3d54ced3 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h
@@ -96,7 +96,7 @@ class CoreSideInMultiSo : public PlatformBridge::CoreSide {
                                   std::vector<VALUE_WITH_TYPE *> &params) override;
     int CreateInstance(const char *instanceId, const char *func,
                        const char *script, const char *opts, const char *initData,
-                       const char *extendsApi, const char* render_strategy) override;
+                       const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
     std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
     int DestroyInstance(const char *instanceId) override;
     int UpdateGlobalConfig(const char *config) override;
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp b/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp
index 19ecd997cf..9217f78640 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp
@@ -433,7 +433,7 @@ void ScriptSideInMultiProcess::ExecJSWithCallback(
 
 int ScriptSideInMultiProcess::CreateInstance(
     const char *instanceId, const char *func, const char *script,
-    const char *opts, const char *initData, const char *extendsApi) {
+    const char *opts, const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) {
   try {
 
     if(sender_ == nullptr) {
@@ -449,7 +449,10 @@ int ScriptSideInMultiProcess::CreateInstance(
     serializer->add(opts, strlen(opts));
     serializer->add(initData, strlen(initData));
     serializer->add(extendsApi, strlen(extendsApi));
-
+    for (auto it = params.begin(); it != params.end(); ++it) {
+      serializer->add((*it)->type->content, (*it)->type->length);
+      serializer->add((*it)->value->content, (*it)->value->length);
+    }
     std::unique_ptr<IPCBuffer> buffer = serializer->finish();
     std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
     if (result->getType() != IPCType::INT32) {
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_process.h b/weex_core/Source/android/bridge/script/script_side_in_multi_process.h
index 24d243a2c7..0cc4e2d67f 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_process.h
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_process.h
@@ -62,7 +62,7 @@ class ScriptSideInMultiProcess : public ScriptBridge::ScriptSide {
 
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, const char *opts, const char *initData,
-                     const char *extendsApi) override;
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) override;
 
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
 
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp b/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
index 02f063b1b8..c43ea28f03 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
@@ -140,13 +140,13 @@ void ScriptSideInMultiSo::ExecJSWithCallback(
 int ScriptSideInMultiSo::CreateInstance(const char *instanceId,
                                         const char *func, const char *script,
                                         const char *opts, const char *initData,
-                                        const char *extendsApi) {
+                                        const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) {
   if(script_side_functions_ == nullptr) {
     LOGE("ScriptSideInMultiSo::CreateInstance script_side_functions_ is null");
     return false;
   }
   return script_side_functions_->funcCreateInstance(instanceId, func, script,
-                                                    opts, initData, extendsApi);
+                                                    opts, initData, extendsApi,params);
 }
 
 std::unique_ptr<WeexJSResult> ScriptSideInMultiSo::ExecJSOnInstance(const char *instanceId,
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_so.h b/weex_core/Source/android/bridge/script/script_side_in_multi_so.h
index 87ed718315..d8d0f3f873 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_so.h
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_so.h
@@ -61,7 +61,7 @@ class ScriptSideInMultiSo : public ScriptBridge::ScriptSide {
 
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, const char *opts, const char *initData,
-                     const char *extendsApi) override;
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) override;
 
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
 
diff --git a/weex_core/Source/android/wrap/wx_bridge.cpp b/weex_core/Source/android/wrap/wx_bridge.cpp
index 2e9cf92585..bc0344f90c 100644
--- a/weex_core/Source/android/wrap/wx_bridge.cpp
+++ b/weex_core/Source/android/wrap/wx_bridge.cpp
@@ -511,6 +511,10 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
       new WXJSObject(env, base::android::ScopedLocalJavaRef<jobject>(
           env, env->GetObjectArrayElement(args, 5))
           .Get()));
+
+  auto extraOptionString = base::android::ScopedLocalJavaRef<jstring>(
+          env, getJsonData(env, args, 6));
+
   auto japi = arg4->GetData(env);
   ScopedJStringUTF8 scoped_id(env, instanceId);
   ScopedJStringUTF8 scoped_func(env, function);
@@ -519,7 +523,22 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
   ScopedJStringUTF8 scoped_api(env, static_cast<jstring>(japi.Get()));
   ScopedJStringUTF8 scoped_render_strategy(
       env, static_cast<jstring>(render_strategy->GetData(env).Release()));
-
+  ScopedJStringUTF8 scoped_extra_option(env, extraOptionString.Get());
+
+  std::string err;
+  const std::string input = scoped_extra_option.getChars();
+  const json11::Json &json = json11::Json::parse(input, err);
+
+  const std::map<std::string, json11::Json> &data = json.object_items();
+  auto it = data.begin();
+  std::vector<INIT_FRAMEWORK_PARAMS*> params;
+  while (it != data.end()) {
+    INIT_FRAMEWORK_PARAMS *param = nullptr;
+    const std::string &string = it->second.string_value();
+    param = WeexCore::genInitFrameworkParams(it->first.c_str(),it->second.string_value().c_str());
+    params.push_back(param);
+    it++;
+  }
   // If strategy is DATA_RENDER_BINARY, jscript is a jbyteArray, otherwise jstring
   // TODO use better way
   if (scoped_render_strategy.getChars() != nullptr
@@ -530,7 +549,7 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
         ->core_side()
         ->CreateInstance(scoped_id.getChars(), scoped_func.getChars(),
                          byte_array.getBytes(), byte_array.length(), scoped_opts.getChars(),
-                         scoped_init_data.getChars(), scoped_api.getChars(),
+                         scoped_init_data.getChars(), scoped_api.getChars(), params,
                          scoped_render_strategy.getChars());
   } else {
     ScopedJStringUTF8 scoped_script(env, static_cast<jstring>(jscript.Get()));
@@ -540,7 +559,7 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
         ->CreateInstance(scoped_id.getChars(), scoped_func.getChars(),
                          scoped_script.getChars(), strlen(scoped_script.getChars()),
                          scoped_opts.getChars(),
-                         scoped_init_data.getChars(), scoped_api.getChars(),
+                         scoped_init_data.getChars(), scoped_api.getChars(),params,
                          scoped_render_strategy.getChars());
   }
 
diff --git a/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp b/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
index b767ed43fa..8c5cca3ac1 100644
--- a/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
+++ b/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
@@ -425,7 +425,7 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
                                        const char *script, int script_length,
                                        const char *opts,
                                        const char *initData,
-                                       const char *extendsApi,
+                                       const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                                        const char *render_strategy) {
   // First check about DATA_RENDER mode
   if (render_strategy != nullptr) {
@@ -440,12 +440,13 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
               const_cast<std::map<std::string, json11::Json> &>(
                   opts_json.object_items());
           opts_map["bundleType"] = "Vue";
+          std::vector<INIT_FRAMEWORK_PARAMS*> params;
           WeexCoreManager::Instance()
               ->script_bridge()
               ->script_side()
               ->CreateInstance(instanceId.c_str(), func.c_str(), result,
                                opts_json.dump().c_str(), initData.c_str(),
-                               extendsApi.c_str());
+                               extendsApi.c_str(),params);
         };
     if (strcmp(render_strategy, "DATA_RENDER") == 0) {
       auto node_manager =
@@ -467,7 +468,7 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
   return WeexCoreManager::Instance()
       ->script_bridge()
       ->script_side()
-      ->CreateInstance(instanceId, func, script, opts, initData, extendsApi);
+      ->CreateInstance(instanceId, func, script, opts, initData, extendsApi, params);
 }
 
 std::unique_ptr<WeexJSResult> CoreSideInPlatform::ExecJSOnInstance(const char *instanceId,
diff --git a/weex_core/Source/core/bridge/platform/core_side_in_platform.h b/weex_core/Source/core/bridge/platform/core_side_in_platform.h
index 490c7d9817..4a9158409d 100644
--- a/weex_core/Source/core/bridge/platform/core_side_in_platform.h
+++ b/weex_core/Source/core/bridge/platform/core_side_in_platform.h
@@ -97,7 +97,7 @@ class CoreSideInPlatform : public PlatformBridge::CoreSide {
                           long callback_id) override;
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, int script_length, const char *opts, const char *initData,
-                     const char *extendsApi, const char* render_strategy) override;
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
                                const char *script) override;
   int DestroyInstance(const char *instanceId) override;
diff --git a/weex_core/Source/core/bridge/platform_bridge.h b/weex_core/Source/core/bridge/platform_bridge.h
index 6b014aef61..38602bb291 100644
--- a/weex_core/Source/core/bridge/platform_bridge.h
+++ b/weex_core/Source/core/bridge/platform_bridge.h
@@ -119,7 +119,7 @@ class PlatformBridge {
                                     long callback_id) = 0;
     virtual int CreateInstance(const char* instanceId, const char* func,
                                const char* script, int script_length, const char* opts,
-                               const char* initData, const char* extendsApi,
+                               const char* initData, const char* extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                                const char* render_strategy) = 0;
     virtual std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char* instanceId,
                                          const char* script) = 0;
diff --git a/weex_core/Source/core/bridge/script_bridge.h b/weex_core/Source/core/bridge/script_bridge.h
index 7790792706..9ba6f70b05 100644
--- a/weex_core/Source/core/bridge/script_bridge.h
+++ b/weex_core/Source/core/bridge/script_bridge.h
@@ -140,7 +140,7 @@ class ScriptBridge {
     virtual int CreateInstance(const char *instanceId, const char *func,
                                const char *script, const char *opts,
                                const char *initData,
-                               const char *extendsApi) = 0;
+                               const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) = 0;
 
     virtual std::unique_ptr<WeexJSResult>  ExecJSOnInstance(const char *instanceId,
                                    const char *script) = 0;
diff --git a/weex_core/Source/include/WeexApiHeader.h b/weex_core/Source/include/WeexApiHeader.h
index 53b5ef6161..9b00e02229 100644
--- a/weex_core/Source/include/WeexApiHeader.h
+++ b/weex_core/Source/include/WeexApiHeader.h
@@ -287,7 +287,7 @@ typedef void(*FuncExeJSWithResultId)(const char *instanceId, const char *nameSpa
                                            std::vector<VALUE_WITH_TYPE *> &params, long callback_id);
 
 typedef int (*FuncCreateInstance)(const char *instanceId, const char *func, const char *script, const char *opts,
-                                  const char *initData, const char *extendsApi);
+                                  const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params);
 
 typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnInstance)(const char *instanceId, const char *script);
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services