From c089761f9b5e0e3d362b20968626fc1b9a19eb14 Mon Sep 17 00:00:00 2001 From: Ben Nham Date: Mon, 31 Oct 2016 14:59:29 -0700 Subject: [PATCH] Use JSCExecutor to manage loading js script in JSContext Reviewed By: jaegs Differential Revision: D4021624 fbshipit-source-id: 8e46052ad246e842a88715d55059a233196a4a6b --- ReactAndroid/src/main/jni/xreact/jni/BUCK | 1 + ReactAndroid/src/main/jni/xreact/jni/JSLoader.cpp | 2 ++ ReactCommon/cxxreact/JSCExecutor.cpp | 9 ++++++--- ReactCommon/cxxreact/JSCExecutor.h | 6 ++++-- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/jni/xreact/jni/BUCK b/ReactAndroid/src/main/jni/xreact/jni/BUCK index 38b4033328a793..dc760146419401 100644 --- a/ReactAndroid/src/main/jni/xreact/jni/BUCK +++ b/ReactAndroid/src/main/jni/xreact/jni/BUCK @@ -5,6 +5,7 @@ SUPPORTED_PLATFORMS = '^android-(armv7|x86)$' EXPORTED_HEADERS = [ 'CxxModuleWrapper.h', + 'JSLoader.h', 'NativeArray.h', 'NativeCommon.h', 'NativeMap.h', diff --git a/ReactAndroid/src/main/jni/xreact/jni/JSLoader.cpp b/ReactAndroid/src/main/jni/xreact/jni/JSLoader.cpp index 62d8cb9e56fca0..d21cb6f942f9b7 100644 --- a/ReactAndroid/src/main/jni/xreact/jni/JSLoader.cpp +++ b/ReactAndroid/src/main/jni/xreact/jni/JSLoader.cpp @@ -31,11 +31,13 @@ std::unique_ptr loadScriptFromAssets(const std::string& asset return loadScriptFromAssets(AAssetManager_fromJava(env, assetManager), assetName); } +__attribute__((visibility("default"))) AAssetManager *extractAssetManager(jobject jassetManager) { auto env = jni::Environment::current(); return AAssetManager_fromJava(env, jassetManager); } +__attribute__((visibility("default"))) std::unique_ptr loadScriptFromAssets( AAssetManager *manager, const std::string& assetName) { diff --git a/ReactCommon/cxxreact/JSCExecutor.cpp b/ReactCommon/cxxreact/JSCExecutor.cpp index 15e073b7df1efc..8c2fe94aca72e5 100644 --- a/ReactCommon/cxxreact/JSCExecutor.cpp +++ b/ReactCommon/cxxreact/JSCExecutor.cpp @@ -132,7 +132,7 @@ JSCExecutor::JSCExecutor(std::shared_ptr delegate, m_delegate(delegate), m_deviceCacheDir(cacheDir), m_messageQueueThread(messageQueueThread), - m_nativeModules(delegate->getModuleRegistry()), + m_nativeModules(delegate ? delegate->getModuleRegistry() : nullptr), m_jscConfig(jscConfig) { initOnJSVMThread(); @@ -362,9 +362,12 @@ void JSCExecutor::loadApplicationScript(std::unique_ptr scrip String jsSourceURL(sourceURL.c_str()); evaluateScript(m_context, jsScript, jsSourceURL); - bindBridge(); - flush(); + // TODO(luk): t13903306 Remove this check once we make native modules working for java2js + if (m_delegate) { + bindBridge(); + flush(); + } ReactMarker::logMarker("CREATE_REACT_CONTEXT_END"); ReactMarker::logMarker("RUN_JS_BUNDLE_END"); } diff --git a/ReactCommon/cxxreact/JSCExecutor.h b/ReactCommon/cxxreact/JSCExecutor.h index 0462abc712e604..32cccf128737fa 100644 --- a/ReactCommon/cxxreact/JSCExecutor.h +++ b/ReactCommon/cxxreact/JSCExecutor.h @@ -22,7 +22,9 @@ namespace react { class MessageQueueThread; -class JSCExecutorFactory : public JSExecutorFactory { +#define RN_JSC_EXECUTOR_EXPORT __attribute__((visibility("default"))) + +class RN_JSC_EXECUTOR_EXPORT JSCExecutorFactory : public JSExecutorFactory { public: JSCExecutorFactory(const std::string& cacheDir, const folly::dynamic& jscConfig) : m_cacheDir(cacheDir), @@ -46,7 +48,7 @@ class WorkerRegistration : public noncopyable { Object jsObj; }; -class JSCExecutor : public JSExecutor { +class RN_JSC_EXECUTOR_EXPORT JSCExecutor : public JSExecutor { public: /** * Must be invoked from thread this Executor will run on.