// INTERNAL INCLUDES
#include <dali/devel-api/adaptor-framework/environment-variable.h>
+#include <dali/devel-api/adaptor-framework/lifecycle-controller.h>
#include <dali/devel-api/adaptor-framework/web-engine/web-engine-back-forward-list.h>
#include <dali/devel-api/adaptor-framework/web-engine/web-engine-certificate.h>
#include <dali/devel-api/adaptor-framework/web-engine/web-engine-console-message.h>
} // unnamed namespace
+void* WebEngine::mHandle = nullptr;
+WebEngine::CreateWebEngineFunction WebEngine::mCreateWebEnginePtr = nullptr;
+WebEngine::DestroyWebEngineFunction WebEngine::mDestroyWebEnginePtr = nullptr;
+
WebEnginePtr WebEngine::New()
{
WebEngine* instance = new WebEngine();
-
if(!instance->Initialize())
{
delete instance;
return instance;
}
-WebEngine::WebEngine()
-: mPlugin(NULL),
- mHandle(NULL),
- mCreateWebEnginePtr(NULL),
- mDestroyWebEnginePtr(NULL)
+Dali::WebEngineContext* WebEngine::GetContext()
{
+ if(!InitializePluginHandle())
+ {
+ return nullptr;
+ }
+
+ using GetWebEngineContext = Dali::WebEngineContext* (*)();
+ GetWebEngineContext getWebEngineContextPtr = reinterpret_cast<GetWebEngineContext>(dlsym(mHandle, "GetWebEngineContext"));
+ if(getWebEngineContextPtr)
+ {
+ return getWebEngineContextPtr();
+ }
+
+ return nullptr;
}
-WebEngine::~WebEngine()
+Dali::WebEngineCookieManager* WebEngine::GetCookieManager()
{
- if(mHandle != NULL)
+ if(!InitializePluginHandle())
{
- if(mDestroyWebEnginePtr != NULL)
- {
- mPlugin->Destroy();
- mDestroyWebEnginePtr(mPlugin);
- }
+ return nullptr;
+ }
- dlclose(mHandle);
+ using GetWebEngineCookieManager = Dali::WebEngineCookieManager* (*)();
+ GetWebEngineCookieManager getWebEngineCookieManagerPtr = reinterpret_cast<GetWebEngineCookieManager>(dlsym(mHandle, "GetWebEngineCookieManager"));
+ if(getWebEngineCookieManagerPtr)
+ {
+ return getWebEngineCookieManagerPtr();
}
+
+ return nullptr;
}
bool WebEngine::InitializePluginHandle()
{
+ if(mHandle)
+ {
+ DALI_LOG_ERROR("Plugin.so has been opened already.\n");
+ return true;
+ }
+
if(pluginName.length() == 0)
{
// pluginName is not initialized yet.
if(name)
{
pluginName = MakePluginName(name);
- mHandle = dlopen(pluginName.c_str(), RTLD_LAZY);
- if(mHandle)
- {
- return true;
- }
}
- pluginName = std::string(kPluginFullNameDefault);
+ else
+ {
+ pluginName = std::string(kPluginFullNameDefault);
+ }
}
mHandle = dlopen(pluginName.c_str(), RTLD_LAZY);
return false;
}
- return true;
-}
-
-bool WebEngine::Initialize()
-{
- char* error = NULL;
+ // Make sure that mHandle would be closed.
+ Dali::LifecycleController::Get().TerminateSignal().Connect(&WebEngine::ClosePluginHandle);
- if(!InitializePluginHandle())
+ mCreateWebEnginePtr = reinterpret_cast<CreateWebEngineFunction>(dlsym(mHandle, "CreateWebEnginePlugin"));
+ if(mCreateWebEnginePtr == nullptr)
{
+ DALI_LOG_ERROR("Can't load symbol CreateWebEnginePlugin(), error: %s\n", dlerror());
return false;
}
- mCreateWebEnginePtr = reinterpret_cast<CreateWebEngineFunction>(dlsym(mHandle, "CreateWebEnginePlugin"));
- if(mCreateWebEnginePtr == NULL)
+ mDestroyWebEnginePtr = reinterpret_cast<DestroyWebEngineFunction>(dlsym(mHandle, "DestroyWebEnginePlugin"));
+ if(mDestroyWebEnginePtr == nullptr)
{
- DALI_LOG_ERROR("Can't load symbol CreateWebEnginePlugin(), error: %s\n", error);
+ DALI_LOG_ERROR("Can't load symbol DestroyWebEnginePlugin(), error: %s\n", dlerror());
return false;
}
- mDestroyWebEnginePtr = reinterpret_cast<DestroyWebEngineFunction>(dlsym(mHandle, "DestroyWebEnginePlugin"));
+ return true;
+}
- if(mDestroyWebEnginePtr == NULL)
+void WebEngine::ClosePluginHandle()
+{
+ if(mHandle)
+ {
+ dlclose(mHandle);
+ mHandle = nullptr;
+ }
+}
+
+WebEngine::WebEngine()
+: mPlugin(nullptr)
+{
+}
+
+WebEngine::~WebEngine()
+{
+ if(mPlugin != nullptr && mDestroyWebEnginePtr != nullptr)
+ {
+ mPlugin->Destroy();
+ mDestroyWebEnginePtr(mPlugin);
+ }
+}
+
+bool WebEngine::Initialize()
+{
+ if(!InitializePluginHandle())
{
- DALI_LOG_ERROR("Can't load symbol DestroyWebEnginePlugin(), error: %s\n", error);
return false;
}
mPlugin = mCreateWebEnginePtr();
-
- if(mPlugin == NULL)
+ if(mPlugin == nullptr)
{
DALI_LOG_ERROR("Can't create the WebEnginePlugin object\n");
return false;
return mPlugin->GetSettings();
}
-Dali::WebEngineContext& WebEngine::GetContext() const
-{
- return mPlugin->GetContext();
-}
-
-Dali::WebEngineCookieManager& WebEngine::GetCookieManager() const
-{
- return mPlugin->GetCookieManager();
-}
-
Dali::WebEngineBackForwardList& WebEngine::GetBackForwardList() const
{
return mPlugin->GetBackForwardList();