From 0c6d3ac5aa5d1d7a0e5e613cd7fabd5934d56531 Mon Sep 17 00:00:00 2001 From: Sidhanth B H Date: Thu, 19 Jun 2025 17:18:32 +0530 Subject: [PATCH 1/3] RDKEMW-3106 : Ensure modules path works in all environments Reason for change: Resolving ModulesPath issue Test Procedure: build should be successful. Risks: low Priority: P2 --- include/JavaScriptContextBase.h | 4 +++ src/JavaScriptContextBase.cpp | 59 ++++++++++++++++++++++++--------- src/jsc/JavaScriptContext.cpp | 34 ++++++++++--------- 3 files changed, 65 insertions(+), 32 deletions(-) diff --git a/include/JavaScriptContextBase.h b/include/JavaScriptContextBase.h index 76a1e1d..9235476 100644 --- a/include/JavaScriptContextBase.h +++ b/include/JavaScriptContextBase.h @@ -69,5 +69,9 @@ class JavaScriptContextBase:public IJavaScriptContext, public JavaScriptKeyListe bool mEmbedWebBridge; bool mEnableWebSockerServer; ModuleSettings mModuleSettings; + + static std::string sModulesPath; + static void populateModulesPath(); + }; #endif diff --git a/src/JavaScriptContextBase.cpp b/src/JavaScriptContextBase.cpp index 009375f..3205873 100644 --- a/src/JavaScriptContextBase.cpp +++ b/src/JavaScriptContextBase.cpp @@ -25,9 +25,12 @@ #ifdef ENABLE_ESSOS #include #endif +#include +#include std::string JavaScriptContextBase::sThunderJSCode = ""; std::string JavaScriptContextBase::sWebBridgeCode = ""; +std::string JavaScriptContextBase::sModulesPath = " " JavaScriptContextFeatures::JavaScriptContextFeatures(bool embedThunderJS, bool embedWebBridge, bool enableWebSockerServer, ModuleSettings& moduleSettings):mEmbedThunderJS(embedThunderJS), mEmbedWebBridge(embedWebBridge), mEnableWebSockerServer(enableWebSockerServer), mModuleSettings(moduleSettings) { @@ -35,18 +38,19 @@ JavaScriptContextFeatures::JavaScriptContextFeatures(bool embedThunderJS, bool e JavaScriptContextBase::JavaScriptContextBase(JavaScriptContextFeatures& features, std::string url, IJavaScriptEngine* jsEngine): mApplicationUrl(url), mEngine(jsEngine), mEmbedThunderJS(features.mEmbedThunderJS), mEmbedWebBridge(features.mEmbedWebBridge), mEnableWebSockerServer(features.mEnableWebSockerServer), mModuleSettings(features.mModuleSettings) { + populateModulesPath(); if (mEmbedThunderJS) { if (sThunderJSCode.empty()) - { - sThunderJSCode = readFile("modules/thunderJS.js"); + { + sThunderJSCode = readFile("thunderJS.js"); } } if (mEmbedWebBridge) { if (sWebBridgeCode.empty()) - { - sWebBridgeCode = readFile("modules/webbridgesdk.js"); + { + sWebBridgeCode = readFile("webbridgesdk.js"); } } #ifdef ENABLE_ESSOS @@ -75,9 +79,23 @@ void JavaScriptContextBase::registerCommonUtils() std::string JavaScriptContextBase::readFile(const char *file) { - std::ifstream src_file(file); + bool isModule = true; + std::ifstream src_file; std::stringstream src_script; - src_script << src_file.rdbuf(); + struct stat path; + if(stat(file, &path) == 0){ + isModule=false; + } + if(!isModule){ + src_file.open(file); + src_script << src_file.rdbuf(); + } + else{ + std::string fileName=sModulesPath; + fileName.append(file); + src_file.open(fileName); + src_script << src_file.rdbuf(); + } return src_script.str(); } @@ -86,24 +104,17 @@ bool JavaScriptContextBase::runFile(const char *file, const char* args, bool isA if (!file) { NativeJSLogger::log(WARN, "%s ... no script given.\n", __PRETTY_FUNCTION__); - fflush(stdout); + fflush(stdout); return false; } - std::string scriptToRun; scriptToRun = readFile(file); + NativeJSLogger::log(INFO, "Checking in [%s]\n", file); if(scriptToRun.empty()) { - std::string fileName("/home/root/"); - fileName.append(file); - scriptToRun = readFile(fileName.c_str()); - NativeJSLogger::log(INFO, "Checking in [%s]\n", fileName.c_str()); - if(scriptToRun.empty()) - { NativeJSLogger::log(ERROR, "%s ... load error / not found. %s\n", __PRETTY_FUNCTION__, file); - fflush(stdout); + fflush(stdout); return false; - } } return evaluateScript(scriptToRun.c_str(), isApplication?file:nullptr, args, isApplication); } @@ -132,3 +143,19 @@ ModuleSettings JavaScriptContextBase::getModuleSettings() { return mModuleSettings; } + +void JavaScriptContextBase::populateModulesPath(){ + if(getenv("JSRUNTIME_MODULES_PATH")) + { + std::cout<<"JSRUNTIME_MODULES_PATH variable is set"< #endif #endif +#include +#include extern "C" JS_EXPORT void JSSynchronousGarbageCollectForDebugging(JSContextRef); #ifdef ENABLE_AAMP_JSBINDINGS_STATIC @@ -407,48 +409,48 @@ if (mModuleSettings.enablePlayer) injectFun(mContext, "require", requireCallback); if(mModuleSettings.enablePlayer) { - runFile("modules/video.js", nullptr); + runFile("video.js", nullptr); } if (mModuleSettings.enableXHR) { - runFile("modules/xhr.js", nullptr); + runFile("xhr.js", nullptr); } if (mModuleSettings.enableHttp) { - runFile("modules/http.js", nullptr); - runFile("modules/https.js", nullptr); + runFile("http.js", nullptr); + runFile("https.js", nullptr); } if (mModuleSettings.enableFetch) { - runFile("modules/node-fetch.js", nullptr/*, true*/); + runFile("node-fetch.js" , nullptr/*, true*/); } - runFile("modules/utils.js", nullptr); + runFile("utils.js", nullptr); if (mModuleSettings.enableWebSocketEnhanced) { - runFile("modules/event.js", nullptr); - runFile("modules/wsenhanced.js", nullptr); - } + runFile("event.js", nullptr); + runFile("wsenhanced.js", nullptr); +} else if(mModuleSettings.enableWebSocket) { - runFile("modules/ws.js", nullptr); + runFile("ws.js", nullptr); } #ifdef WS_SERVER_ENABLED if (mEnableWebSockerServer) { NativeJSLogger::log(INFO, "enabling websocket server\n"); - runFile("modules/wsserver.js", nullptr); + runFile("wsserver.js", nullptr); } #endif if (mModuleSettings.enableWindow) { - runFile("modules/window.js", nullptr/*, true*/); - runFile("modules/windowwrapper.js", nullptr/*, true*/); + runFile("window.js", nullptr/*, true*/); + runFile("windowwrapper.js", nullptr/*, true*/); } else if (mModuleSettings.enableJSDOM) { - runFile("modules/linkedjsdom.js", nullptr/*, true*/); - runFile("modules/linkedjsdomwrapper.js", nullptr/*, true*/); - runFile("modules/windowwrapper.js", nullptr/*, true*/); + runFile("linkedjsdom.js", nullptr/*, true*/); + runFile("linkedjsdomwrapper.js", nullptr/*, true*/); + runFile("windowwrapper.js", nullptr/*, true*/); if(getenv("FIREBOLT_ENDPOINT")!=NULL) { auto FireboltEndpoint = std::string(getenv("FIREBOLT_ENDPOINT")); From ac64607c9ef96894462a0134d834ca43adbbde72 Mon Sep 17 00:00:00 2001 From: Sidhanth B H Date: Thu, 19 Jun 2025 17:22:11 +0530 Subject: [PATCH 2/3] RDKEMW-3106 : Ensure modules path works in all environments Reason for change: Resolving ModulesPath issue Test Procedure: build should be successful. Risks: low Priority: P2 --- include/JavaScriptContextBase.h | 2 -- src/JavaScriptContextBase.cpp | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/include/JavaScriptContextBase.h b/include/JavaScriptContextBase.h index 9235476..0f19fcc 100644 --- a/include/JavaScriptContextBase.h +++ b/include/JavaScriptContextBase.h @@ -69,9 +69,7 @@ class JavaScriptContextBase:public IJavaScriptContext, public JavaScriptKeyListe bool mEmbedWebBridge; bool mEnableWebSockerServer; ModuleSettings mModuleSettings; - static std::string sModulesPath; static void populateModulesPath(); - }; #endif diff --git a/src/JavaScriptContextBase.cpp b/src/JavaScriptContextBase.cpp index 3205873..cf83670 100644 --- a/src/JavaScriptContextBase.cpp +++ b/src/JavaScriptContextBase.cpp @@ -30,7 +30,7 @@ std::string JavaScriptContextBase::sThunderJSCode = ""; std::string JavaScriptContextBase::sWebBridgeCode = ""; -std::string JavaScriptContextBase::sModulesPath = " " +std::string JavaScriptContextBase::sModulesPath = ""; JavaScriptContextFeatures::JavaScriptContextFeatures(bool embedThunderJS, bool embedWebBridge, bool enableWebSockerServer, ModuleSettings& moduleSettings):mEmbedThunderJS(embedThunderJS), mEmbedWebBridge(embedWebBridge), mEnableWebSockerServer(enableWebSockerServer), mModuleSettings(moduleSettings) { From 7edfb919334cb31d27d5ded9db4c6fbd1bcb8c1f Mon Sep 17 00:00:00 2001 From: Sidhanth B H Date: Thu, 19 Jun 2025 18:29:35 +0530 Subject: [PATCH 3/3] RDKEMW-3106 : Ensure modules path works in all environments Reason for change: Cleaned up the code Test Procedure: build should be successful. Risks: low Priority: P2 --- src/JavaScriptContextBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JavaScriptContextBase.cpp b/src/JavaScriptContextBase.cpp index cf83670..e936654 100644 --- a/src/JavaScriptContextBase.cpp +++ b/src/JavaScriptContextBase.cpp @@ -156,6 +156,6 @@ void JavaScriptContextBase::populateModulesPath(){ std::string PWD=cwd; sModulesPath=PWD+"/modules/"; } - std::cout<<"Modules Path:"<