ExtensionManagerEfl.cpp [plain text]
#include "config.h"
#include "ExtensionManagerEfl.h"
#include "InjectedBundle.h"
#include "Module.h"
#include "WKBundleAPICast.h"
#include "ewk_extension.h"
#include "ewk_extension_private.h"
#include <wtf/NeverDestroyed.h>
#include <wtf/text/CString.h>
namespace WebKit {
ExtensionManagerEfl& ExtensionManagerEfl::singleton()
{
static NeverDestroyed<ExtensionManagerEfl> extensionManager;
return extensionManager;
}
ExtensionManagerEfl::ExtensionManagerEfl()
{
}
void ExtensionManagerEfl::initialize(WKBundleRef bundle, WKTypeRef userData)
{
ASSERT(!m_extension);
m_extension = std::make_unique<EwkExtension>(toImpl(bundle));
if (!userData)
return;
String extensionsDirectory = toImpl(static_cast<WKStringRef>(userData))->string();
if (extensionsDirectory.isEmpty())
return;
Vector<String> modulePaths = WebCore::listDirectory(extensionsDirectory, ASCIILiteral("*.so"));
for (size_t i = 0; i < modulePaths.size(); ++i) {
if (WebCore::fileExists(modulePaths[i])) {
auto module = std::make_unique<Module>(modulePaths[i]);
if (!module->load())
continue;
Ewk_Extension_Initialize_Function initializeFunction = module->functionPointer<Ewk_Extension_Initialize_Function>("ewk_extension_init");
if (!initializeFunction)
continue;
initializeFunction(m_extension.get(), nullptr );
m_extensionModules.append(module.release());
}
}
}
}