diff --git a/include/NativeJSRenderer.h b/include/NativeJSRenderer.h index e4d9fdc..d75e2b5 100644 --- a/include/NativeJSRenderer.h +++ b/include/NativeJSRenderer.h @@ -92,7 +92,7 @@ namespace JsRuntime { struct ApplicationRequest { - ApplicationRequest(uint32_t id, RequestType requestType, std::string url="", bool enableHttp=false, bool enableXHR=false, bool enableWebSocket=false, bool enableWebSocketEnhanced=false, bool enableFetch=false, bool enableJSDOM=false, bool enableWindow=false, bool enablePlayer=false): mId(id), mRequestType(requestType), mUrl(url), mEnableHttp(enableHttp), mEnableXHR(enableXHR), mEnableWebSocket(enableWebSocket), mEnableWebSocketEnhanced(enableWebSocketEnhanced), mEnableFetch(enableFetch), mEnableJSDOM(enableJSDOM), mEnableWindow(enableWindow), mEnablePlayer(enablePlayer) + ApplicationRequest(uint32_t id, RequestType requestType, std::string url="", bool enableHttp=false, bool enableXHR=false, bool enableWebSocket=false, bool enableWebSocketEnhanced=false, bool enableFetch=false, bool enableJSDOM=false, bool enableWindow=false, bool enablePlayer=false, std::string userAgent=""): mId(id), mRequestType(requestType), mUrl(url), mEnableHttp(enableHttp), mEnableXHR(enableXHR), mEnableWebSocket(enableWebSocket), mEnableWebSocketEnhanced(enableWebSocketEnhanced), mEnableFetch(enableFetch), mEnableJSDOM(enableJSDOM), mEnableWindow(enableWindow), mEnablePlayer(enablePlayer), mUserAgent(userAgent) { } uint32_t mId; @@ -106,6 +106,8 @@ namespace JsRuntime { bool mEnableJSDOM; bool mEnableWindow; bool mEnablePlayer; + std::string mUserAgent; + }; struct ApplicationData{ std::string url; @@ -123,10 +125,11 @@ namespace JsRuntime { void setEnvForConsoleMode(ModuleSettings& moduleSettings); bool runApplication(uint32_t id, std::string url); bool runJavaScript(uint32_t id, std::string code); - uint32_t createApplication(ModuleSettings& moduleSettings) ; + uint32_t createApplication(ModuleSettings& moduleSettings, std::string userAgent) ; bool terminateApplication(uint32_t id); std::list getApplications(); void setExternalApplicationHandler(std::shared_ptr handler); + std::string getBaseUserAgent(); private: bool downloadFile(std::string& url, MemoryStruct& chunk); void processDevConsoleRequests(); @@ -151,5 +154,6 @@ namespace JsRuntime { std::map mContextMap; std::vector gPendingRequests; std::shared_ptr mExternalApplicationHandler; + std::string mBaseUserAgent; }; }; diff --git a/src/JSRuntimeServer.cpp b/src/JSRuntimeServer.cpp index 340a070..3269830 100644 --- a/src/JSRuntimeServer.cpp +++ b/src/JSRuntimeServer.cpp @@ -217,7 +217,7 @@ void JSRuntimeServer::onMessage(websocketpp::connection_hdl hdl, message_ptr msg std::string options = jParams.getString("moduleSettings", error); ModuleSettings moduleSettings; moduleSettings.fromString(options); - uint32_t id = mRenderer->createApplication(moduleSettings); + uint32_t id = mRenderer->createApplication(moduleSettings, mRenderer->getBaseUserAgent()); mRenderer->runApplication(id, url); std::ostringstream oss; oss<< "ID : " << id; @@ -237,7 +237,7 @@ void JSRuntimeServer::onMessage(websocketpp::connection_hdl hdl, message_ptr msg } ModuleSettings moduleSettings; moduleSettings.fromString(options); - uint32_t id = mRenderer->createApplication(moduleSettings); + uint32_t id = mRenderer->createApplication(moduleSettings,mRenderer->getBaseUserAgent()); std::ostringstream oss; oss<< "ID : " << id; result = oss.str(); diff --git a/src/NativeJSRenderer.cpp b/src/NativeJSRenderer.cpp index fbc852f..1244f51 100644 --- a/src/NativeJSRenderer.cpp +++ b/src/NativeJSRenderer.cpp @@ -103,6 +103,10 @@ NativeJSRenderer::NativeJSRenderer(std::string waylandDisplay): mEngine(nullptr) } const char* levelFromEnv = getenv("NATIVEJS_LOG_LEVEL"); + + //setting the base userAgent value + mBaseUserAgent = "Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15 "; + // checking for ethan log env #ifdef USE_ETHANLOG NativeJSLogger::isEthanLogEnabled(); @@ -214,12 +218,12 @@ uint32_t NativeJSRenderer::createApplicationIdentifier() return ret; } -uint32_t NativeJSRenderer::createApplication(ModuleSettings& moduleSettings) +uint32_t NativeJSRenderer::createApplication(ModuleSettings& moduleSettings, std::string userAgent) { uint32_t id=0; mUserMutex.lock(); id = createApplicationIdentifier(); - ApplicationRequest request(id, CREATE, "", moduleSettings.enableHttp, moduleSettings.enableXHR, moduleSettings.enableWebSocket, moduleSettings.enableWebSocketEnhanced, moduleSettings.enableFetch, moduleSettings.enableJSDOM, moduleSettings.enableWindow, moduleSettings.enablePlayer); + ApplicationRequest request(id, CREATE, "", moduleSettings.enableHttp, moduleSettings.enableXHR, moduleSettings.enableWebSocket, moduleSettings.enableWebSocketEnhanced, moduleSettings.enableFetch, moduleSettings.enableJSDOM, moduleSettings.enableWindow, moduleSettings.enablePlayer, userAgent); gPendingRequests.push_back(request); mUserMutex.unlock(); return id; @@ -289,7 +293,7 @@ void NativeJSRenderer::createApplicationInternal(ApplicationRequest& appRequest) settings.enableWindow = appRequest.mEnableWindow; settings.enablePlayer = appRequest.mEnablePlayer; uint32_t id= appRequest.mId; - + std::string userAgent = appRequest.mUserAgent; JavaScriptContextFeatures features(mEmbedThunderJS, mEmbedRdkWebBridge, mEnableWebSocketServer, settings); JavaScriptContext* context = new JavaScriptContext(features, "" , mEngine); if(NULL == context) @@ -297,7 +301,12 @@ void NativeJSRenderer::createApplicationInternal(ApplicationRequest& appRequest) NativeJSLogger::log(DEBUG, "Context not created for ID: %d\n", id); return ; } - NativeJSLogger::log(DEBUG, "Context created for ID: %d\n", id); + + std::stringstream uagent; + uagent << "window.navigator.userAgent = \"" << userAgent << "\";"; + context->runScript(uagent.str().c_str(),true, userAgent, nullptr, true); + + NativeJSLogger::log(DEBUG, "Context created for ID: %d\n", id); if (mExternalApplicationHandler) { context->setExternalApplicationHandler(mExternalApplicationHandler); } @@ -619,3 +628,9 @@ void NativeJSRenderer::setExternalApplicationHandler(std::shared_ptrcreateApplication(moduleSettings); + uint32_t id = renderer->createApplication(moduleSettings,renderer->getBaseUserAgent()); renderer->runApplication(id, url); //renderer->runJavaScript(id,url); #if defined(NATIVEJS_DEVELOPER_MODE)